还有上面代码过滤下划线的笔者注悉掉了,因为有些参数可以使用下划线,自己权衡怎么过滤;
有些代码把关键字当重点过滤对象,其实关键字的str_replace很容易“蒙过关”,str_replace(“ininsertsert”)过滤后的字符还是insert,所以关键的是其他字符而不是mysql关键字。
(3)文本数据防注入代码。
文本参数是指标题、留言、内容等这些数据不可能也用str_replace()过滤掉,这样就导致数据的完整性,这是很不可取的。
代码:
function no_inject($str)
{
if(is_array($str))
{
foreach($stras$key =>$val)
{
$str[$key]=no_inject($val);
}
}else
{
//把一些敏感关键字的第一个字母代替掉,如or 则用"or"代替
$str = str_replace(" "," ",$str);
$str = str_replace("\\","\",$str);
$str = str_replace("'"," ' ",$str);
$str = str_replace('"'," " ",$str);
$str = str_replace("or"," o r",$str);
$str = str_replace("and"," and",$str);
$str = str_replace("#","# ",$str);
$str = str_replace("-- ","-- ",$str);
$str = str_replace("null","null",$str);
$str = str_replace("%","%",$str);
//$str = str_replace("_","_",$str);
$str = str_replace(">","",$str);
$str = str_replace("<",">",$str);
$str = str_replace("=","=",$str);
$str = str_replace("char","char",$str);
$str = str_replace("declare","declare",$str);
$str = str_replace("select","select",$str);
$str = str_replace("create","create",$str);
$str = str_replace("delete","delete",$str);
$str = str_replace("insert","insert",$str);
$str = str_replace("execute","execute",$str);
$str = str_replace("update","update",$str);
$str = str_replace("count","count",$str);
}
return$str;
}
(4)当然还有其他与addslashes、mysql_escape_string结合的代码。
防注入的代码其实来来去去都是那些组合,然后根据自己程序代码变通,笔者这些代码也是没考虑全的,不如cookes、session、request都没全过滤。重要是知道其中原理,为什么过滤这些字符,字符有什么危害。当然还有一些笔者没考虑也没能力考虑到的方面比如还有哪些关键字之类,欢迎mailto:chen_bin_wen@163.com/445235728@qq.com
4、防止xss攻击
XSS:cross site script 跨站脚本,为什么不叫css,为了不和div+css混淆。
4.1Xss攻击过程:
(1)发现A站有xss漏洞。
(2)注入xss漏洞代码。可以js代码,木马,脚本文件等等,这里假如A站的benwin.php这个文件有漏洞。
(3)通过一些方法欺骗A站相关人员运行benwin.php,其中利用相关人员一些会员信息如cookies,权限等。
相关人员:
管理员(如贴吧版主),管理员一般有一定权限。目的是借用管理员的权限或进行提权,添或加管理员,或添加后门,或上传木马,或进一步渗透等相关操作。
A站会员:会员运行A站的benwin.php。目的一般是偷取会员在A站的信息资料。
方法:
1) 在A站发诱骗相关人到benwin.php的信息,比如网址,这种是本地诱骗
2) 在其他网站发诱骗信息或者发邮件等等信息。
一般通过伪装网址骗取A站相关人员点击进benwin.php
(4)第三步一般已经是一次xss攻击,如果要更进一步攻击,那不断重复执行(2)、(3)步以达到目的。
简单例说xss攻击
代码:
benwin.php文件
当用户名$user_name的值是“benwin" onSubmit="alert('这是xss攻击的例子');" class= "”(这里)
当提交表单的时候就会弹出提示框。
(1)很明显$user_name在保存进数据库的时候没有过滤xss字符(和防注入很像,这里举例说明)==>发现漏洞
(2)构造xss代码:benwin" onSubmit="alert('这是xss攻击的例子');" class= "" 传入数据库
(3)骗相关人员进来点击“提交”按钮
4.2常见xss攻击地方
(1)Js地方
$testname的值只要符合js闭合关系:“";alert("test xss ");”(以下同理)
(2)form表单里面
原文转自:http://blogread.cn/it/article/6086