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函数对数组进行转换。转换完后,我们再
对这几个数组的值进行必要的转义。具体采用哪一种可自行决定。