我用PHP的strpos函数写了一个简单的防止注入的代码,希望大家帮我改错

$str="upadta,insert";if(strpos($_POST['user'],$str)){echo'内容非法';}... $str="upadta,insert";
if(strpos($_POST['user'],$str)){
echo'内容非法';
}
展开
 我来答
百度网友cb4985820
2013-08-06 · TA获得超过562个赞
知道小有建树答主
回答量:250
采纳率:0%
帮助的人:234万
展开全部
<?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('内容非法');
}
?>
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式