还剩7页未读,继续阅读
文本内容:
使用PHP构建的Web应用如何防止XSS攻击WEB平安电脑资料Web
2.0的开展为网络用户的互动提供了更多时机,本文首先简单介绍开发测试人员如何对Web应用进展XSS破绽测试,如何借助工具绕过客户端JavaScript.校验输入恶意数据;然后针对使用PHP语言构建的Web站点,从在输出端对动态内容进展编码、以及在效劳器端对输入进展检测两方面介绍如何防止恶意的XSS攻击对Web应用进展XSS破绽测试测试途径对WEB应用进展XSS破绽测试,不能仅仅局限于在WEB页面输入XSS攻击字段,然后提交绕过JavaScript.的检测,输入XSS脚本,通常被测试人员忽略下列图为XSS恶意输入绕过JavaScript.检测的攻击途径图
1.XSS攻击测试途径–绕过JavaScript.校验常见的XSS输入XSS输入通常包含JavaScript.脚本,如弹出恶意警告框XSS输入也可能是HTML代码段,譬如网页不停地刷新嵌入其它网站的链接XSSCrossSiteScriptingCheatSheet维护了一份常见的XSS攻击脚本列表,可用来作为检测WEB应用是否存在XSS破绽的测试用例输入初次接触XSS攻击的开发人员可能会对列表提供的一些XSS输入不是很理解,本文第二局部将会针对不同代码上下文的XSS输入作进一步的解释测试工具很多工具可以在阅读器发送Get/Post恳求前将其截取,攻击者可以修改恳求中的数据,从而绕过JavaScript.的检验将恶意数据注入效劳器以下是一些常用的截取恳求的工具列表Parosproxy.parosproxyFiddler.fiddlertool./fiddlerBurpproxy.portswigger./proxy/TamperIE.bayden./dl/TamperIESetup.exe笔者曾经使用TamperIE对WEB应用进展平安性测试TamperIE小巧易用,可以截取IE阅读器发送的Get/Post恳求,甚至能绕过SSL加密不过TamperIE+IE7工作不稳定IE7提供了对IPV6的支持,假如你并不测试你的Web应用对IPV6的支持,建议还是使用TamperIE+IE6的组合如图2所示:TamperIE绕过客户端阅读器JavaScript.的校验,在POST恳求提交时将其截取,用户可以任意修改表单输入项name和message的值,譬如将message的值修改为,然后点击”Sendaltereddata”按钮,将修改后的恶意数据发送给Web效劳器图
2.使用TamperIE截取Post恳求回页首在输出端对动态内容进展编码对一个Web应用而言,其动态内容可能用户输入、后台数据库、硬件状态改变或是网络信息等动态内容特别是用户输入的动态内容很有可能包含恶意数据,从而影响网页的正常显示或是执行恶意脚本将动态内容平安地显示在阅读器端与动态内容所处的上下文背景有关,譬如动态内容处在HTML正文、表单元素的属性、或是JavaScript.代码段中对于一个基于PHP语言的Web应用,当执行echo、print、printf、攻击使用PHP的htmlspecialchars显示HTML特殊字符从上文列举的XSS恶意输入可以看到,这些输入中包含了一些特殊的HTML字符如、当传送到客户端阅读器显示时,阅读器会解释执行这些HTML或JavaScript.代码而不是直接显示这些字符串“等字符在HTML语言中有特殊含义,对于用户输入的特殊字符,如何直接显示在网页中而不是被阅读器当作特殊字符进展解析HTML字符实体由符号、实体名字或者#加上实体编号、分号三局部组成以下为HTML中一些特殊字符的编码有的字符实体只有实体编号,没有对应的实体名字,譬如单引号表
1.一些HTML特殊字符的实体编码PHP提供了htmlspecialchars函数可以将HTML特殊字符转化成在网页上显示的字符实体编码这样即使用户输入了各种HTML标记,在读回到阅读器时,会直接显示这些HTML标记,而不是解释执行htmlspecialchars函数可以将以下五种HTML特殊字符转成字符实体编码转成“转成转成转成‘转成当直接调用htmlspecialchars$str时被转义当设置ENTQUOTES标记时即调用htmlspecialchars$strENTQUOTES时,单引号也被转义当设置ENTNOQUOTES标记时,单引号和双引号都不会被转义即调用htmlspecialchars$strENTNOQUOTES时,只有被转义不同背景下的动态内容的XSS攻击及解决方案XSS攻击输入与动态内容所处的代码背景相关,譬如动态内容为表单元素属性的值、位于HTML正文、或是Javascript.代码段中等等HTML标记的属性为动态内容Web应用中,input、style、color等HTML标记的属性都可能为动态内容,其中input标记的value属性通常为动态内容例子1攻击XSS输入将动态内容交换将$msg交换为恶意XSS输入:例子2攻击XSS输入将动态内容交换将$msg交换为恶意XSS输入:分析从例子1可以看到其XSS攻击输入中包含了HTML特殊字符从例子2可以看到其XSS攻击输入中没有包含上节中提到的五种HTML字符,但是value属性值没有使用双引号包围解决方案调用htmlspecialchars$strENTQUOTES将以下5种HTML特殊字符‘“转义;同时使属性值被双引号包围譬如考前须知将input的value进展转义,必须考虑显示和存储数据的一致性问题,即显示在阅读器端和存储在效劳器端后台的数据可能因为转义而变得不一致,
1.当再度将表单提交时,存储的内容将会变成转义后的值
2.当使用JavaScript.操作表单元素,需要使用到表单元素的值时,必须考虑到值可能已经被转义HTML文本为动态内容攻击XSS输入将动态内容交换将$welemsg交换为恶意XSS输入:分析在HTML正文背景下,字符会引入HTML标记,可能会认为字符实体编码的开场,所以需要将转义解决方案为简洁起见,直接使用htmlspecialchars将5种HTML特殊字符转义,如URL的值为动态内容Script/Style/Img/ActiveX/Applet/Frameset…等标记的src或href属性假如为动态内容,必须确保这些URL没有指向恶意链接例子1攻击XSS输入将动态内容交换将$scripturl交换为恶意XSS输入:例子2攻击XSS输入将动态内容交换将$imgurl交换为恶意XSS输入:分析一般情况下尽量不要让URL的值被用户控制假如用户需要自己定义自己的风格及显示效果,也不能让用户直接控制整个URL的内容,而是提供预定义好的风格供用户设置、装配,然后由后台程序根据用户的选择组合成平安的URL输出字符集编码阅读器需要知道字符集编码才能正确地显示网页假如字符集编码没有显式在content-type或meta.中定义,阅读器会有算法猜想网页的字符集编码譬如的UTF-7编码为假如+ADw-script+AD4-alertdocument.cookie+ADw-/script+AD4-作为动态内容位于网页的顶端并传送到阅读器端,IE会认为此网页是UTF-7编码,从而使网页不能正常显示解决方案显式定义网页的字符集编码,譬如动态内容为JavaScript事件处理函数的参数JavaScript.事件处理函数如onClick/onLoad/onError/onMouseOver/的参数可能包含动态内容例子攻击XSS输入将动态内容交换HTML解析器会先于JavaScript.解析器解析网页,将$targeturl交换为恶意XSS输入:动态内容位于JavaScript.代码段中例子攻击XSS输入1将动态内容交换将$welemsg交换为恶意XSS输入:攻击XSS输入2将动态内容交换将$welemsg交换为恶意XSS输入:分析如上文所示,在JavaScript.背景中使用动态内容需要非常慎重一般情况下,尽量防止或减少在Javascript.的背景下使用动态内容,假如必须使用动态内容,在开发或代码审计时必须考虑这些动态内容可能的取值,是否会导致XSS攻击回页首建立PHP库函数校验输入Web开发人员必须理解,仅仅在客户端使用JavaScript.函数对非法输入进展检测过滤对于构建平安的WEB应用是不够的如上文所述,攻击者可以轻易地借助工具绕过JavaScript.校验甚至SSL加密输入恶意数据在输出端对动态内容进展编码也只能起到一种双重保护的作用,更重要的应该在效劳器端对输入进展校验PHP提供了strpos、strstr、pregmatch等函数可用于检测非法字符和字符串;pregreplace函数可用于交换非法字符串OWASPPHPFilters开源工程提供了一些PHP库函数用于过滤非法输入可作为参考一些常见的检测和过滤包括回页首Web应用的平安性是一个很重要、覆盖范围很广泛的主题为了防止常见的XSS的攻击,Web开发人员必须明白不能仅仅只在客户端使用JavaScript.对输入进展检测、过滤;同时还应建立效劳器端的输入校验、输出编码库函数;在效劳器端检测、过滤输入;根据动态内容所处的背景将特殊字符进展编码后再传送给阅读器端显示参考资料参考“XSSCheatSheet”列举了一些常见的XSS攻击脚本可用作XSS破绽测试用例输入查看“PHP函数手册”,理解htmlspecialchars()API参考“HTML字符实体编码”理解HTML字符实体编码参考“开放式Web应用程序平安工程”社区,理解更多Web平安相关内容访问“TamperIE“,获得TamperIE,可用作XSS破绽测试工具参考“XSSPreventionCheatSheet“,理解防止XSS攻击的一些规那么访问“OWASPPHPFilters“,可获得开源的用于过滤非法输入的PHP库函数以供参考查看“推荐PHP读物列表”阅读developerWorks上的所有PHP内容通过查阅IBMdeveloperWorks的PHP工程资源进步您的PHP技能访问developerWorks开放源码专区,获得丰富的how-to信息、工具和工程更新,帮助您用开放源码技术进展开发,并与IBM产品结合使用模板内容仅供参考 。