利用PHP编程防范XSS跨站脚本攻击

  国内不少论坛都存在跨站脚本漏洞国外也很多这样的例子甚至Google也出现过不过在12月初时修正了。(编者注关于跨站脚本漏洞攻击读者可参阅《详解XSS跨站脚本攻击》)。跨站攻击很容易就可以构造而且非常隐蔽不易被查觉通常盗取信息后马上跳转回原页面。

  如何攻击在此不作说明也不要问我主要谈谈如何防范。首先跨站脚本攻击都是由于对用户的输入没有进行严格的过滤造成的所以我们必须在所有数据进入我们的网站和数据库之前把可能的危险拦截。针对非法的HTML代码包括单双引号等可以使用htmlentities() 。

?php
$str = "A 'quote' is bbold/b";

// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str);

// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str, ENT_QUOTES);
?
  这样可以使非法的脚本失效。

  但是要注意一点htmlentities()默认编码为 ISO-8859-1如果你的非法脚本编码为其它那么可能无法过滤掉同时浏览器却可以识别和执行。这个问题我先找几个站点测试后再说。

  这里提供一个过滤非法脚本的函数

function RemoveXSS($val) {
 // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
 // this prevents some character re-spacing such as java\0script
 // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
 $val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val);

 // straight replacements, the user should never need these since they're normal characters
 // this prevents like IMG SRC=@avascript:a&
    _#X6Cert('XSS')
 $search = 'abcdefghijklmnopqrstuvwxyz';
 $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 $search .= '1234567890!@#$%^&*()';
 $search .= '~`";:?+/={}[]-_|\'\\';
 for ($i = 0; $i strlen($search); $i++) {
  // ;? matches the ;, which is optional
  // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars

  // @ @ search for the hex values
  $val = preg_replace('/([x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
  // @ @ 0{0,7} matches '0' zero to seven times
  $val = preg_replace('/({0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
 }

 // now the only remaining whitespace attacks are \t, \n, and \r
 $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
$ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
 $ra = array_merge($ra1, $ra2);

 $found = true; // keep replacing as long as the previous round replaced something
 while ($found == true) {
  $val_before = $val;
  for ($i = 0; $i sizeof($ra); $i++) {
   $pattern = '/';
   for ($j = 0; $j strlen($ra[$i]); $j++) {
    if ($j 0) {
     $pattern .= '(';
     $pattern .= '([x|X]0{0,8}([9][a][b]);?)?';
     $pattern .= '|({0,8}([9][10][13]);?)?';
     $pattern .= ')?';
    }
   $pattern .= $ra[$i][$j];
  }
  $pattern .= '/i';
  $replacement = substr($ra[$i], 0, 2).'x'.substr($ra[$i], 2); // add in to nerf the tag
  $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
  if ($val_before == $val) {
   // no replacements were made, so exit the loop
   $found = false;
  }
 }
}
}

时间: 2024-12-23 04:47:30

利用PHP编程防范XSS跨站脚本攻击的相关文章

《XSS跨站脚本攻击剖析与防御》—第6章6.5节利用Flash进行CSRF

6.5 利用Flash进行CSRFXSS跨站脚本攻击剖析与防御Flash在客户端提供了两个控制属性:allowScriptAccess属性和allowNetworking属性,其中AllowScriptAccess控制Flash与HTML页面的通信,如果设置不恰当会导致XSS:而AllowNetworking控制Flash与外部网络的通信,如果设置不当会导致CSRF. CSRF的中文名称是"跨站请求伪造",和XSS一样是一种常见的Web程序漏洞(攻击手段),CSRF能够做的事情是以你的

《XSS跨站脚本攻击剖析与防御》—第6章6.4节利用Flash进行XSS攻击剖析

6.4 利用Flash进行XSS攻击剖析 XSS跨站脚本攻击剖析与防御 利用嵌入Web页面中的Flash进行XSS有一个决定因素:allowScriptAccess属性.allowScriptAccess是使用或 下面是一个简单的示例: allowScriptAccess属性控制着Flash与HTML页面的通信,可选的值有3个: always:允许随时执行脚本操作 never:禁止所有脚本执行操作 samedomain:只有在Flash 应用程序来自与HTML页相同的域时才允许执行脚本操作 其属

《XSS跨站脚本攻击剖析与防御》目录—导读

内容提要 XSS跨站脚本攻击剖析与防御 本书是一本专门剖析XSS安全的专业书,总共8章,主要包括的内容如下. 第1章 XSS初探,主要阐述了XSS的基础知识,包括XSS的攻击原理和危害.第2章 XSS利用方式,就当前比较流行的XSS利用方式做了深入的剖析,这些攻击往往基于客户端,从挂马.窃取Cookies.会话劫持到钓鱼欺骗,各种攻击都不容忽视.第3章 XSS测试和利用工具,介绍了一些常见的XSS测试工具.第4章 发掘XSS漏洞,着重以黑盒和白盒的角度介绍如何发掘XSS漏洞,以便帮助读者树立安全

《XSS跨站脚本攻击剖析与防御》—第6章6.1节参 考 文 献

参 考 文 献 XSS跨站脚本攻击剖析与防御 [1] <精通 JavaScript> (美)John Resi /陈贤安(译) [2] <JavaScript核心技术> (美)Shelley Powers /苏敬凯(译) [3] <XSS Attacks: Cross Site Scripting Exploits and Defense>Seth Fogie/Jeremiah Grossman/Robert Hansen/Anton Rager/Petko D. Pe

《XSS跨站脚本攻击剖析与防御》—第6章6.2节 Flash安全模型

6.2 Flash安全模型XSS跨站脚本攻击剖析与防御Adobe的Flash技术已经变得越来越流行了,现在该软件不仅用于创建动画和广告,而且还用来开发复杂的应用程序.借助于ActionScript,Flash具备了与服务器的交互功能,当然,不可避免地成为漏洞和后门程序的主攻之地,越来越多的黑客开始着力发掘Flash安全漏洞,基于Flash的客户端攻击日渐密集,包括我们熟知的XSS.CSRF等. 自Flash7.0问世以来,Flash的安全模型(Security Model)就开始运行,主要提供以

《XSS跨站脚本攻击剖析与防御》—第6章6.3节Flash客户端攻击剖析

6.3 Flash客户端攻击剖析XSS跨站脚本攻击剖析与防御对Flash的基础概念和安全模型进行详细介绍后,现在我们来讨论一些比较实际.也是大家最关心的问题--Flash的安全漏洞. 最早研究Flash漏洞的安全人员要算是Stefano Di-Paola,当时他在OWASP发布了几篇论文,详细介绍了Flash的众多安全漏洞,以及如何利用这些漏洞执行XSS.CSRF之类的攻击,下面让我们一步步进行讨论. 6.3.1 getURL() & XSS在Flash中被利用最多是 XSS漏洞.第一个Flas

如何利用php防止XSS跨站脚本攻击

 首先,跨站脚本攻击都是由于对用户的输入没有进行严格的过滤造成的,所以我们必须在所有数据进入我们的网站和数据库之前把可能的危险拦截.针对非法的HTML代码包括单双引号等,可以使用htmlentities()函数 . <?php $str = "A "quote" is <b>bold</b>"; // Outputs: A "quote" is bold echo htmlentities($str); // Out

最新的黑客技术:XSS跨站脚本攻击详细介绍_漏洞研究

总体上介绍 简单介绍什么是XSS攻击 如何寻找XSS漏洞 对于XSS攻击的总体思路 来自内部的攻击: 如何寻找内部的XSS漏洞 如何构造攻击 如何利用 结何实例攻击,如DVBBS&BBSXP 来自外部的攻击 如何构造XSS攻击 如何欺骗管理员打开 XSS与其它技术的结何 与mssql injection的结合 QQ跨站的结何 国内大型统计网站的跨站漏洞 社会工程学 制作恐怖的flash木马 制作方法由李丰初写 总结  正文: XSS总体介绍 什么是XSS攻击 XSS又叫CSS  (Cross S

雅虎又爆XSS跨站脚本攻击漏洞 问题出在邮箱处理Youtube视频链接

芬兰安全研究人员Jouko Pynnonen第二次拿到雅虎1万美元奖金,这次是发现了一个全新的雅虎邮箱存储型跨站脚本漏洞.不到一年前,Pynnonen私下披露了雅虎邮箱的一个存储型跨站脚本(Stored XSS)漏洞,获得雅虎HackerOne计划颁发的10000美元奖金. 雅虎在11月29日(Pynnonen报告漏洞17天之后)修复了该漏洞.这个漏洞给用户带来的风险与2015年漏洞一样.也就是说,攻击者可以利用这个漏洞来读取受害人的电子邮件.在受害人电脑植入恶意软件或者利用其它漏洞.同时,受害