用PHP写个检查SQL注入的脚本? 如题,希望大家能给些思路! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 检查sql注入还是防止sql注入... 回复楼上: 检测sql注入 检测这个,治标不治本,很容易就绕过了,形同虚设,而且会过滤掉不该过滤的东西。建议你在执行每一个SQL查询的时候都注意该问题。非要这样的话,那就检测$_GET、$_POST和$_COOKIE中的每一个元素以及元素中的子元素,是否包含:'"SELECT三类字符。 问题就是,如果用户正常提交时,内容也包括上述几种字符,那么就悲剧了。而且可以通过Double Encoding之类的方式使得这类过滤毫无防御力。 http://blog.csdn.net/wbandzlhgod/article/details/6653584 最好在生成SQL语句时使用mysql_real_escape函数对字符串进行转义过滤,既不影响用户体验,也很安全。 5楼正解,如果仅仅是检测是否有sql注入的话,很简单,就是检查你所取到的参数中是否含有sql语句的关键字['select','update','delete',....]等。如果防止sql注入的话,也有很多方法:8楼说的mysql_real_escape函数或者当检测到sql注入的时候给予提示等。 function inject_check($str){ $tmp=preg_match('/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/', $str); // 进行过滤 if($tmp){ echo "输入非法注入内容!"; exit(); }else{ return $str; }}$id=inject_check($_GET['id']);echo $id;麻烦哪位能给我讲讲这段代码是什么意思了,那个美元符是什么意思了,那个过滤的函数具体的过滤过程是什么了?小弟刚学这些,各种不懂呀 1、过滤检查查询语句2、sql语句书写规范,记着加单引号 可以负责任的跟你说,除非你的系统允许传入整句的 sql 指令,并直接执行。php 不存在 sql 注入的可能性! 这是很那啥的方法根本不需要这样写。直接一个设定magic_quote +addslashes就可以了。头文件:function y_addslashes($string) { if(is_array($string)) { foreach($string as $key => $val) { $string[$key] = y_addslashes($val); } } else { $string = addslashes($string); } return $string;}set_magic_quotes_runtime(0);y_addslashes($_GET);y_addslashes($_POST);y_addslashes($_COOKIE);然后你再查询时候记得把所有值都用单引号围起来,mysql_query("select * from `doc_info` where `id`='" . $_GET['id']."'");基本就没法注入了。不过xss提防反而要麻烦点。 (1)要实现检测成功最直观的方法就是通过注入SQL特殊字符判断页面返回结果是否报错,但是网站一般来说会关闭报错信息,因此不一定能判断成功;(2)第二个方法就是注入删除或者更新SQL语句,再查看语句是否执行成功。 没发现这么多年总去php站后台提权玩,头回听说php不能注入。。 你就吹吧!魔术开,无机会魔术关,用函数(addslashes或其他同类)转义单引号,无机会 set_magic_quotes_runtime(0);$_POST=Add_S($_POST);$_GET=Add_S($_GET);$_COOKIE=Add_S($_COOKIE);function Add_S($array){ foreach($array as $key=>$value){ if(!is_array($value)){ $value=str_replace("&#x","& # x",$value);//过滤一些不安全字符 $value=preg_replace("/eval/i","eva l",$value);//过滤不安全函数 !get_magic_quotes_gpc() && $value=addslashes($value); $array[$key]=$value; }else{ $array[$key]=Add_S($array[$key]); } } return $array;}不要告诉我,你没看懂这个 我是根据mysql字段生成配置文件过滤sql语句 magic_quote_gpc开了也有机会,鸡肋功能,各种问题。。php从前几个版本开始就不再支持魔术功能了,这玩意太悲剧。每个值都addslashes,包括SQL的字段名,绝对OK。 需要这么被催嘛?SQL写规范点就完事了. 关于"PHP留言板编辑"问题? PHP插入数据问题 如果取出最近的一条记录? 求一段代码 php函数分割问题 apache 为什么不启动 征求一下意见~~~ 请问phplib支持(if..else)这样类型的语句吗?看到smarttemplate是支持的 为什么我的php不出现错误提示?? 求救:请大家帮我看看这段代码那里错了。谢谢! 求教 php读取excel文件出错
检测sql注入
建议你在执行每一个SQL查询的时候都注意该问题。
非要这样的话,那就检测$_GET、$_POST和$_COOKIE中的每一个元素以及元素中的子元素,是否包含:
'
"
SELECT三类字符。
或者当检测到sql注入的时候给予提示等。
$tmp=preg_match('/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/', $str); // 进行过滤
if($tmp){
echo "输入非法注入内容!";
exit();
}else{
return $str;
}
}
$id=inject_check($_GET['id']);
echo $id;
麻烦哪位能给我讲讲这段代码是什么意思了,那个美元符是什么意思了,那个过滤的函数具体的过滤过程是什么了?小弟刚学这些,各种不懂呀
2、sql语句书写规范,记着加单引号
头文件:
function y_addslashes($string) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = y_addslashes($val);
}
} else {
$string = addslashes($string);
}
return $string;}set_magic_quotes_runtime(0);
y_addslashes($_GET);
y_addslashes($_POST);
y_addslashes($_COOKIE);然后你再查询时候记得把所有值都用单引号围起来,
mysql_query("select * from `doc_info` where `id`='" . $_GET['id']."'");基本就没法注入了。不过xss提防反而要麻烦点。
没发现这么多年总去php站后台提权玩,头回听说php不能注入。。
魔术开,无机会
魔术关,用函数(addslashes或其他同类)转义单引号,无机会
$_POST=Add_S($_POST);
$_GET=Add_S($_GET);
$_COOKIE=Add_S($_COOKIE);function Add_S($array){
foreach($array as $key=>$value){
if(!is_array($value)){
$value=str_replace("&#x","& # x",$value);//过滤一些不安全字符
$value=preg_replace("/eval/i","eva l",$value);//过滤不安全函数
!get_magic_quotes_gpc() && $value=addslashes($value);
$array[$key]=$value;
}else{
$array[$key]=Add_S($array[$key]);
}
}
return $array;
}
不要告诉我,你没看懂这个
magic_quote_gpc开了也有机会,鸡肋功能,各种问题。。php从前几个版本开始就不再支持魔术功能了,这玩意太悲剧。每个值都addslashes,包括SQL的字段名,绝对OK。