安全的代码之PHP大法

安全的代码之PHP大法

0x00 摘要

作为一个安全从业者,对于代码的安全较为敏感,网站的的漏洞源于代码的漏洞 。

白盒狗专注代码漏洞挖掘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;
        }
    }
    ?>

代码审计之PHP

比较一下(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()避免任何恶意用户运行系统命令”; system(“echo $b”);//结果(2)?>结果(1): sixwhale;ls结果(2): sixwhale 1.php(遍历当前目录下所有文件)

    在shell里是分割命令的作用 所以可想而知 只要改变;后的值就可以导致很多命令注入

  • strip_tags()去掉HTML和PHP标记 避免恶意脚本植入

0x02 转义输出

最常见的就是插入恶意的HTML代码 使用 htmlspecialchars()或者 htmlentities()函数

0x03 (//∀//)

关于代码审计,之前接触的不多,将自己学到的一些东西,整理思路,记录于博客中,一方面是为了加强记忆,另一方面也是为了之后用到查找的方便(இдஇ; )

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值