刚说到XSS攻击.. 我记得我之前做一个项目.就给检测出存在XSS攻击。开始我没有过滤提交的内容。后来foreach 循环过滤每一个变量$_GET...$_POST...,发现不行。然后只好写了个函数 直接检测 $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"] 判断直接 exit...不知道大家都是怎么处理这个问题的... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 本帖最后由 PhpNewnew 于 2012-08-10 22:00:38 编辑 没用是什么意思。。就是<>'"这些东西变成HTML实体再输出到页面就不会被当作HTML内容解析了, 没其他东西吧. 你用foreach($_GET as &$value){$value=htmlspecialchars($value);}这样来过滤? <?php$array = array("hello"=>"dsa<>");foreach($array as &$value){ $value = htmlspecialchars($value);}var_dump($array);array(1) { ["hello"]=> &string(11) "dsa<>"}这样行啊 开始我是这么做的,但是检测不通过.代码如下//攻击代码//http://localhost/test.php/'>" ></script ><script > alert(1)</script >/?id=21050944//这里做检测foreach($_GET as xxx) ....$gif = './images/text.gif';echo "<img src='{$gif}'>";//然后看下img的src...虽然没有弹出alert 但是安全检测说没有通过XSS的安全检测...我就郁闷了 给你这三个函数,你根据需求稍加修改就好了,以后要获取内容的时候不管是get还是post传值都用这样的方法来获取:$变量名=Toget('参数名或表单内的项目名');//函数:获取数据//参数:表单名,是否需要转译Function Toget($__k,$Slash=True){ IF($__k==""){Return False;} IF(Array_key_exists($__k,$_REQUEST)){ $Value=IsSet($_POST["".$__k.""])?$_POST["".$__k.""]:$_GET["".$__k.""]; }Else{ Return False; } IF(Is_array($Value)){ $Value=Array_Filter($Value,'_nul'); }Else{ $Value=Trim($Value); IF($Value==""){Return False;} } IF($Slash){ $Value=Addlash($Value); } //反馈结果 IF(Is_array($Value)){Return $Value;} IF($Value=="" Or !Isset($Value)){ Return False; }Else{ Return $Value; }}function Addlash($Str){ !Defined('MAGIC_QUOTES_GPC') && Define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc()); IF(!MAGIC_QUOTES_GPC){ IF(Is_array($Str)){ $keys=array_keys($Str); Foreach($keys as $key){ $val=$Str[$key];unset($Str[$key]); $Str[addslashes($key)]=Addlash($val); } }Else{ $Str=addslashes($Str); } } Return $Str;}//清理数组中的空值//用法:Print_r (Array_Filter($Arr,'_nul'));Function _nul($param){ Return ($param!="") ? True : False;} 好,先谢了... 不过我比较奇怪的是 我7楼的代码 img src 是怎么会给X进去的. XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意脚本代码,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而达到恶意攻击用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。服务器端脚本防止 XSS 的唯一手段是检查传入的数据中是否有 script 标记当然,攻击者还有 n 多的手段去直接在你的页面中嵌入恶意代码。这就不是服务器端脚本能解决的问题了简单的用 htmlspecialchars 处理一下,只适合于其后只将传入的数据作为字符串显示的场合。由于 <script 可以用回车、换行、制表都字符隔开,而不影响代码的执行。所以判断是否存在 XSS 威胁需要使用“串的最大匹配算法”。对于 #7 的 <img src显然使用的检测算法不是最大匹配算法,而是简单的包含算法虽无大错,但误判率升高。宁可错杀三千,不可放过一个 嗯,看样子是检测过于严格了。不过也没办法,别人这么要求宁可误判也得遵守它的结果。申诉无效..那就只好用我的土方法直接exit. 为什么我这边测试,尽然是这样的。array(1) { ["hello"]=> &string(11) "dsa<>" } php无法连接mysql数据库 同一个页面有多个项目评分,怎样获取到这些分数呢 如何防止刷新或后退页面会重复输入数据库 mysql_query("set names 'gb2312'"); 这句中的参数是什么意思? php简单语法问题!!! iis下php如何联接mysql4.1.11 散分了!进来,好东东。能修能改能编辑的半自动信息发布系统。 这个错误什么意思啊????? php如何访问MYSQL数据库 新版的zend studio11.0创建PHP文件没有结尾的标示符 关于php.exe的问题 请教高手 一下代码如何理解?array_filter
没用是什么意思。。就是<>'"这些东西变成HTML实体再输出到页面就不会被当作HTML内容解析了, 没其他东西吧.
foreach($_GET as &$value){
$value=htmlspecialchars($value);}这样来过滤?
$array = array("hello"=>"dsa<>");
foreach($array as &$value){
$value = htmlspecialchars($value);
}
var_dump($array);
array(1) {
["hello"]=>
&string(11) "dsa<>"
}
这样行啊
代码如下
//攻击代码
//http://localhost/test.php/'>" ></script ><script > alert(1)</script >/?id=21050944//这里做检测
foreach($_GET as xxx) ....
$gif = './images/text.gif';echo "<img src='{$gif}'>";//然后看下img的src...
虽然没有弹出alert 但是安全检测说没有通过XSS的安全检测...
我就郁闷了
$变量名=Toget('参数名或表单内的项目名');
//函数:获取数据
//参数:表单名,是否需要转译
Function Toget($__k,$Slash=True){
IF($__k==""){Return False;} IF(Array_key_exists($__k,$_REQUEST)){
$Value=IsSet($_POST["".$__k.""])?$_POST["".$__k.""]:$_GET["".$__k.""];
}Else{
Return False;
} IF(Is_array($Value)){
$Value=Array_Filter($Value,'_nul');
}Else{
$Value=Trim($Value);
IF($Value==""){Return False;}
} IF($Slash){
$Value=Addlash($Value);
} //反馈结果
IF(Is_array($Value)){Return $Value;}
IF($Value=="" Or !Isset($Value)){
Return False;
}Else{
Return $Value;
}
}
function Addlash($Str){
!Defined('MAGIC_QUOTES_GPC') && Define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc());
IF(!MAGIC_QUOTES_GPC){
IF(Is_array($Str)){
$keys=array_keys($Str);
Foreach($keys as $key){
$val=$Str[$key];unset($Str[$key]);
$Str[addslashes($key)]=Addlash($val);
}
}Else{
$Str=addslashes($Str);
}
}
Return $Str;
}//清理数组中的空值
//用法:Print_r (Array_Filter($Arr,'_nul'));
Function _nul($param){
Return ($param!="") ? True : False;
}
当然,攻击者还有 n 多的手段去直接在你的页面中嵌入恶意代码。这就不是服务器端脚本能解决的问题了
简单的用 htmlspecialchars 处理一下,只适合于其后只将传入的数据作为字符串显示的场合。
由于 <script 可以用回车、换行、制表都字符隔开,而不影响代码的执行。所以判断是否存在 XSS 威胁需要使用“串的最大匹配算法”。对于 #7 的 <img src
显然使用的检测算法不是最大匹配算法,而是简单的包含算法
虽无大错,但误判率升高。宁可错杀三千,不可放过一个
array(1) { ["hello"]=> &string(11) "dsa<>" }