我用PHP的strpos函数写了一个简单的防止注入的代码,希望大家帮我改错
$str="upadta,insert";if(strpos($_POST['user'],$str)){echo'内容非法';}...
$str="upadta,insert";
if(strpos($_POST['user'],$str)){
echo'内容非法';
} 展开
if(strpos($_POST['user'],$str)){
echo'内容非法';
} 展开
1个回答
展开全部
<?php
$str=array("update","insert");
foreach($str as $val){
if(strpos($_POST["user"],$val)===true)
die("非法内容!");
}
?>
//如果仅仅需要过滤以上两个关键字,用上边代码就行咯,但防止注入不是你这样理解的,注入是指 根据表单值或者get数据 构造sql 语句进行危害,比如
$sql="select * from user where id='".$_POST["user"]."'";
如果传来的$_POST["user"]是 a' and 1=1,上边的语句就变成咯
select * from user where id='a' and 1=1';
这只是一个简单的举例,实际情况要复杂得多,因此必须对数据进行过滤。我给你一个我自己的过滤函数
<?php
function getpost($arr){
if (get_magic_quotes_gpc()){
$arr=is_array($arr)?array_map('stripslashes',$arr):stripslashes($arr);
}
if(is_array($arr)){
foreach($arr as $key=>$val){
$arr[$key]=htmlspecialchars($val,ENT_QUOTES);//html实体转换
$arr[$key]=mysql_real_escape_string($arr[$key]);//防注入替换
}
}else{
$arr=htmlspecialchars($arr,ENT_QUOTES);//html实体转换
$arr=mysql_real_escape_string($arr);//防注入替换
}
return $arr;
}
?>
追问
enemy,你回答很快,但是上边那个简单的好像不行呀,麻烦你再看看
这是我的
$str=array("update","insert","delete");
foreach($str as $fangzhuru){
if(stripos($_POST["content"],$fangzhuru)===true)
die('内容非法');
追答
<?php
//改成这样
$str=array("update","insert","delete");
foreach($str as $fangzhuru){
if(strpos($_POST["content"],$fangzhuru)!==false)
die('内容非法');
}
?>
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询