直接就使用get 方式传过来的啊
解决方案 »
- 如何在curl中添加HTTP_ACCEPT_ENCODING 和 HTTP_ACCEPT_LANGUAGE
- gd库的安装
- 关于.htaccess rewrite,帮我处理下
- shell问题
- 用session_set_save_handler来保存session文件时,sess_gc函数用写删除过期的处理过程吗?因为php.ini中也有这个时间,那么在此处,我还
- linux下的php和mysql问题!
- php如何得到存储过程的返回、输出值?
- 一个比较简单的问题!绝对给分!
- 使用dreamweaver打开php文件问题,求大神解答
- ckeditor 4.5.8 的上传处理页 upload.php里应该怎么写,才能上传到目录下?
- 请教一下图像处理的问题
- 有谁可以将以下 perl 代码翻译为 PHP
your code...
if (is_string($v)) {
$array[$k] = stripslashes($v);
} else if (is_array($v)) {
$array[$k] = $this->stripslashes_array($v);
}
}
return $array; }
$_GET =str_replace("'","",stripslashes_array($_GET));
$_POST =str_replace("'","",stripslashes_array($_POST));
$_COOKIE =str_replace("'","",stripslashes_array($_COOKIE));
你把它放在程序开始.格式化所有GET POST COOKIE 哈.好用不好用,你自己看了!!
怎么还有人答非所问, ice_berg16(寻梦的稻草人) 正解
‘君子兰’和‘杜牧’说的接近正确,‘Evilfile(0x208WM)’说出了另外一半。php.ini 中设置 magic_quotes_gpc = On 自动进行过滤,然后写sql语句的时候养成在值得外面加单引号的习惯。这样就避免了sql注入,而且也不用在程序中判断了。
当然,如果你需要设置magic_quotes_gpc = Off,那么在程序中给变量做 addslashes 处理就行了,即
addslashes($_GET['sortid'])。好啦,相信我说清楚了,呵呵
人家可以通过注入单引号来攻击你!我不清楚addslashes()的原理,谁能解释一下?
是不是自动给用户传入的字符都加上/ ?
有什么意义呢?
有时候会让优势变成劣势的。适当的严谨一点会让我们减少很多麻烦。呵呵
当然如果有其他语言的那种把常用的数据扔到内存中常驻就更好了:)考虑问题应该从正常的渠道找到合理的方法,而不是像“宠物中心”那种自作聪明呵呵,说过了,希望对新人有点点帮助。
addslashes()或者php配置中的那个所做的是同样的,
就比如:你的get 变量是 1' and 1=2 union select password from user where 2!='1
那么如果不过滤得话, 你的sql语句可能是 select 。。where sortid='1' and 1=2 union select password from user where 2!='1',那么就会被注入了。
而通过上面2种方法过滤得话,你得到的sql语句是
select 。。where sortid='1\' and 1=2 union select password from user where 2!=\'1'明白它们的用处了吧?
有没有对每种过滤掉的字符可能产生的危险做一下说明阿?每种都给个例子嘛!~:)
对于你的这种情况,最简单的方法就是
$_GET$GET['sortid'] = intval($GET['sortid']);这个攻击的原理是:
首先使你原有的查询失败
.... where sortid=1 and 1=2
由于1=2永远不会成立,所以你原有的查询就没有结果了
然后他附加了自己的查询
select password from user
来取得你user表中的内容
注意那个“union”
这才是个关键,你只要从这里切断传入的串。此类攻击就都不能奏效了
一般如果是整形的数据,建议获取的时候都intval一下,字符串的一般都转义一下就全部OK。
具体如下:1. 打开 register_global = on
2. 打开 magic_quotes_gpc = On
3. 打开 safe_mode = On
4. 过滤变量,不管是get方式还是post方式的数据一律过滤,记得有个强人说过:不要相信任何用户提交的数据。
整型数据获取的时候一般都intval一下,如:$int_var = intval($int_var)
字符串get方式的,一般可以过滤的方式,比如象我使用正则匹配的方式,不过不是特别好,一般转义一下就可以了。
5. 初始化你的变量建议参考以下文章:
http://blog.csdn.net/heiyeshuwu/archive/2005/06/14/394225.aspx (我写的,不强)
http://blog.csdn.net/heiyeshuwu/archive/2005/07/14/424814.aspx (英文的,但是很强)
整型变量:$sql = "SELECT * FROM tbl_name WHERE tid = '$id' ";
字符串变量:$sql = "SELECT * FROM tbl_name WHERE title = '$title' ";那样的话,注入的时候就会出错了,呵呵另外,还建议你参考下,安全天使的文章,里面很多关于如何注入的,知道攻了,就知道怎么防了:
http://www.4ngel.net/article/36.htm
http://www.4ngel.net/article/30.htmhttp://www.4ngel.net
1. 打开 register_global = on应该是:register_global = off呵呵,写on顺手了,全部写了 -_-#