0x00 首先

目前在深入的学习PHP中 自己是个学安全的 所以对于代码的安全较为敏感 网站的的漏洞源于代码的漏洞 白盒狗专注代码漏洞挖掘30年
学好代码审计的关键也是写好代码的关键:

  • 了解恶意用户要从哪些入口攻击整个框架
  • 一切输入都是有害的
  • 不要信任任何一个用户
  • 代码的逻辑

0x01 过滤输入

a.验证提交值是否为期望值或者允许值

<html>
<form action="" method="post">
    <input type="radio" name="gender" value="Male">Male<br/>
    <input type="radio" name="gender" value="Female">Female<br/>
    <input type="submit" name="submit" value="submit"><br/>
</form>
</html>
(a):
<?php
if(!empty($_POST))
{
    echo "The user's gender is ".$_POST['gender'].".<br/>";
}
?>
(b):
<?php
if(!empty($_POST))
{
    switch ($_POST['gender'])
    {
        case 'Male':
        case 'Female':
            echo "The user's gender is ".$_POST['gender'].".<br/>";
            break;

        default:
            echo "Invalid input value for gender specified.<br/>";
            break;
    }
}
?>

比较一下(a)(b)两种后台验证 (b)显然确保了正确值 对于处理数据方面显然很重要
b.确认提交类型是否为允许类型

$number_of_nights = (int)$_POST[’num_nights’];
if($num_of_nights == 0)
{
     echo “Error: Invalied number of nights for the room”;
     exit;
}

这种不仅能确认正确的输入 也可以改进系统的安全
c.输入数据库的数据

  • 输入必须使用addslashes()函数
  • stripslashes()用来返回数据的原始形式
  • php.ini文件中开启magic_quotes_gpc(格式化GET
    POST和cookie变量)和magic_quotes_runtime(格式化进入数据库的数据) 自动添加和过滤斜杠

d.其他恶意输入

  • 当用户传递数据给system()和exec()时 必须使用escapeshellcmd()避免任何恶意用户运行系统命令
<?php
        $a = escapeshellcmd($_GET['id']); //1.php?id=sixwhale;ls
        $b = $_GET['id'];
        system("echo $a");//结果(1)
        echo "<p>";
        system("echo $b");//结果(2)
    ?>

结果(1): sixwhale;ls
结果(2): sixwhale 1.php(遍历当前目录下所有文件)
;在shell里是分割命令的作用 所以可想而知 只要改变;后的值就可以导致很多命令注入

  • strip_tags()去掉HTML和PHP标记 避免恶意脚本植入
    0x02 转义输出

最常见的就是插入恶意的HTML代码 使用htmlspecialchars()或者htmlentities()函数
0x03 (//∀//)
今天看到了PHP与web安全的部分 虽然之前在网上了解过 实践中也有接触 但是感觉还是自己总结笔记印象比较深刻(毕竟还是希望在博客里写一些对自己有用的东西!!!) 只写了一部分 不定期更新中 希望不要吐槽啦(இдஇ; )


本文由 admin 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论