跨站脚本攻击(XSS)漏洞 修复方法
跨站脚本攻击(XSS)漏洞
漏洞描述:
目标存在跨站脚本攻击。
1.跨站脚本攻击就是指恶意攻击者向网页中插入一段恶意代码,当用户浏览该网页时,嵌入到网页中的恶意代码就会被执行。
2.跨站脚本攻击漏洞,英文名称Cross Site Scripting,简称CSS又叫XSS。它指的是恶意攻击者向Web页面中插入一段恶意代码,当用户浏览该页面时,嵌入到Web页面中的恶意代码就会被执行,从而达到恶意攻击者的特殊目的。
危害:
1.恶意用户可以使用该漏洞来盗取用户账户信息、模拟其他用户身份登录,更甚至可以修改网页呈现给其他用户的内容。
2.恶意用户可以使用JavaScript、VBScript、ActiveX、HTML语言甚至Flash应用的漏洞来进行攻击,从而来达到获取其他的用户信息目的。
修复方法:
方法一:站在安全的角度看,必须过滤用户输入的危险数据,默认用户所有的输入数据都是不安全的,请根据自身网站程序做代码修改。
方法二:使用360防跨站攻击脚本。( 需要站长懂得编程并且能够修改服务器代码 )
这里列出PHP站点防护脚本,新建文件xss.php:
- < ?php
- //Code By Safe3
- //Add HTTP_REFERER by D.
- $referer=emptyempty($_SERVER['HTTP_REFERER']) ? array() : array($_SERVER['HTTP_REFERER']);
- function customError($errno, $errstr, $errfile, $errline)
- {
- echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />";
- die();
- }
- set_error_handler("customError",E_ERROR);
- $getfilter="'|\b(alert|confirm|prompt)\b|<[^>]*?>|^\\+\/v(8|9)|\\b(and|or)\\b.+?(>|<|=|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
- $postfilter="^\\+\/v(8|9)|\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|<\\s*img\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
- $cookiefilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
- function StopAttack($StrFiltKey,$StrFiltValue,$ArrFiltReq){
- $StrFiltValue=arr_foreach($StrFiltValue);
- if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1){
- //slog("
- 操作IP: ".$_SERVER["REMOTE_ADDR"]."
- 操作时间: ".strftime("%Y-%m-%d %H:%M:%S")."
- 操作页面:".$_SERVER["PHP_SELF"]."
- 提交方式: ".$_SERVER["REQUEST_METHOD"]."
- 提交参数: ".$StrFiltKey."
- 提交数据: ".$StrFiltValue);
- print "<script type='text/javascript'> alert('您提交的数据带有不合法的参数,请重新输入!\\r\\r感谢您对未来往事的支持~\(≧▽≦)/~啦啦啦');history.go(-1);</script>";
- exit();
- }
- if (preg_match("/".$ArrFiltReq."/is",$StrFiltKey)==1){
- //slog("
- 操作IP: ".$_SERVER["REMOTE_ADDR"]."
- 操作时间: ".strftime("%Y-%m-%d %H:%M:%S")."
- 操作页面:".$_SERVER["PHP_SELF"]."
- 提交方式: ".$_SERVER["REQUEST_METHOD"]."
- 提交参数: ".$StrFiltKey."
- 提交数据: ".$StrFiltValue);
- print "<script type='text/javascript'> alert('您提交的数据带有不合法的参数,请重新输入!\\r\\r感谢您对未来往事的支持~\(≧▽≦)/~啦啦啦');history.go(-1);</script>";
- exit();
- }
- }
- //$ArrPGC=array_merge($_GET,$_POST,$_COOKIE);
- foreach($_GET as $key=>$value){
- StopAttack($key,$value,$getfilter);
- }
- foreach($_POST as $key=>$value){
- StopAttack($key,$value,$postfilter);
- }
- foreach($_COOKIE as $key=>$value){
- StopAttack($key,$value,$cookiefilter);
- }
- foreach($referer as $key=>$value){
- StopAttack($key,$value,$getfilter);
- }
- function slog($logs)
- {
- $toppath=$_SERVER["DOCUMENT_ROOT"]."/log.htm";
- $Ts=fopen($toppath,"a+");
- fputs($Ts,$logs."\r\n");
- fclose($Ts);
- }
- function arr_foreach($arr) {
- static $str;
- if (!is_array($arr)) {
- return $arr;
- }
- foreach ($arr as $key => $val ) {
- if (is_array($val)) {
- arr_foreach($val);
- } else {
- $str[] = $val;
- }
- }
- return implode($str);
- }
- ?>
使用方法:
在所需要防护的页面加入代码
require_once('xss.php'); //如果想整站防注,需要加入到站点公共调用文件中。
本文作者:未来往事
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
第一种方法 如何过滤?
@神经大爆炸
你可以自行定义一个过滤的方法。例如:http://blog.www.fity.cn/post/424/