『壹』 高分求php表单过滤代码。
要防止注入,过滤表单输入固然重要,但还需要从其他方面一起入手
屏蔽用户输入特殊字符的实质是,禁止用户利用程序漏洞拼装出一些我们不想让用户执行的SQL
例如:
$sql="SELECT*FROMtableWHEREuser='$_POST['user']'ANDpassword='$_POST['pwd']'";
用户输入
$_POST['user']='john';
$_POST['pwd']="'OR''='";
要么实际执行的sql就是
SELECT*FROMtableWHEREuser='john'ANDpassword=''OR''=''
所以我们要对用户的输入做出处理,避免这种情况的发生
对于表单输入,必要的过滤是需要的,对于每一个输入可以写一个function来筛一下
例如:
$user_name=clean($_POST['user']);
functionclean($v){
if(get_magic_quotes_gpc()){
$v=stripslashes($v);
}
//转义字符串中的特殊字符
$v=mysql_real_escape_string($v);
return$v;
}
至于内容中包含一些sql的关键字,其实不用太过紧张,但是在sql语句中必须处理
例如:
INSERTINTOtableVALUES('xxx','xxx','xxx')
要保证每个值都被单引号包起来
SELECT,UPDATE,DELETE中的WHERE条件也是如此,但凡以用户输入的部分作为参数的,都得用单引号括起来,这样就能有效防止sql注入
『贰』 php中,通过$_GET 和 $_POST 取得的数据 安不安全 需要什么过滤函数处理吗
引号过滤有magic_quotes_gpc(服务器配置)
函数addslashes() htmlspecialchars(,ENT_QUOTE);
注意服务器上是否已经开启magic_quotes_gpc
(php>=5.3 已经废弃了它) 如果已经开启,再进行转义会导致双层转义。 另外addslashes() addcslashes() 都不能对数组进行处理,需要写一个递归实现。
你可以使用函数get_magic_quotes_gpc()来检测它是否已经开启
不建议使用addslashes使用addslashes可能会因为数据库编码的问题使得单引号未被转义了解详情可访问:http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string
『叁』 php多条件查询问题,怎么过滤空值
是的正如你所说有两种解决方案,第一种是采用PHP的方式,先判断数据的合法性,比如是否提交了空值(推荐使用,没有垃圾数据);第二种不做任何判断,空值也能提交到数据库,只是在SQL查询时过滤空值数据(不推荐使用,有垃圾数据)。
解决方案1(通过PHP过滤空值数据):
if($_POST['字段']=='')exit('<scripttype="text/javascript">alert("数据不合法!");history.back();</script>');//依此类推,逐一判断表单$_POST数据
解决方案2(通过SQL查询来过滤空值数据):
SELECT`字段名`FROM`表名`WHERE`字段1`NOTIN('',NULL)AND`字段2`NOTIN('',NULL)...;
以上就是两种解决方案,我推荐两种方案组合使用,这样确保万无一失,如有问题欢迎追问~
『肆』 使用thinkphp时,表单提交的html内容,全被" \ " 反斜杠过滤了。怎么在前台读取到html实际内容呢去掉 \
因为默认的使用的htmlspecialchars()进行处理的。你可以使用
htmlspecialchars_decode()转成字符