PHP安全(一)

来源:互联网 发布:在线手机小号软件 编辑:程序博客网 时间:2024/04/30 04:31

 TNND.整了两次结果还是没保存,第二次竟然还没提示出错。害我复制了其他的东西。白写了!这BLOG也真...

       这几天看了几篇关于安全的文章,消化理解了下,整理了如下笔记,希望能加深印象。

      首先要说的是"注入"。主要是用户输入不是我们所期待的值,因此造成意想不到的收获。

    1、SQL注入。一下是最常见的一个例子:

   SELECT * FROM users WHERE name='$username' AND pass='$password';

   结果当$password = ' OR '1'='1 时,该SQL就变成

  SELECT * FROM users WHERE name='known_user' AND pass='' OR '1'='1';

   该SQL将会把USERS的表记录全部查询,这样USER就可以饶过该验证进入下一关。

   当然我们有很多方法在验证用户合法性上,这里主要要说的是输入,而不是验证。

   就是因为USER随意输入了',"等会在一般情况下会造成系统困惑的符号而造成的。所以我们需要针对这类问题进行

相应的处理。

   PHP提供了addslashes函数可对输入进行转义,例如'变成/',"变成/";同时PHP.INI也有个魔术常量可达到相同的

效果,magic_qutoes_gpc,该常量在目前版本默认是On,也就是说默认是可进行转换的。但这个会造成一个问题

就是当我们不需要进行转换的时候,它还是执行了转换。所以有时候我们会把它设置为Off,或者通过如下代码进行

控制。

[code]

if (get_magic_quotes_gpc()){
    $_GET = array_map('stripslashes', $_GET);
    $_POST = array_map('stripslashes', $_POST);
    $_COOKIE = array_map('stripslashes', $_COOKIE);
}

[/code]

先判断该常量是否打开,如果是通过array_map函数,调用stripslashes函数对数组进行转换。转换完后,我们再

对这几个数组的值进行必要的转义。具体采用哪一种可自行决定。

原创粉丝点击