Cross-site scripting的缩写是CSS,但因为CSS在网页设计领域已经被广泛指层叠样式表(Cascading Style Sheets),所以将Cross改以发音相近的X做为缩写。但早期的文件还是会使用CSS表示Cross-site scripting。
检测方法 通常有一些方式可以测试网站是否有正确处理特殊字符:
><script>alert(document.cookie)</script> ='><script>alert(document.cookie)</script> "><script>alert(document.cookie)</script> <script>alert(document.cookie)</script> <script>alert(vulnerable)</script> %3Cscript%3Ealert('XSS')%3C/script%3E <script>alert('XSS')</script> <img src="javascript:alert('XSS')"> <img src="http:// www.2cto.com /yyy.png" onerror="alert('XSS')"> <div style="height:expression(alert('XSS'),1)" />(这个仅限 IE 有效) 攻击手段和目的 攻击者使被攻击者在浏览器中执行脚本后,如果需要收集来自被攻击者的数据(如cookie或其他敏感信息),可以自行架设一个网站,让被攻击者通过JavaScript等方式把收集好的数据作为参数提交,随后以数据库等形式记录在攻击者自己的服务器上。
常用的XSS攻击手段和目的有:
盗用 cookie ,获取敏感信息。 利用植入 Flash ,通过 crossdomain 权限设置进一步获取更高权限;或者利用Java等得到类似的操作。 利用 iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。 在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。 漏洞 的防御和利用 过滤特殊字符 避免XSS的方法之一主要是将使用者所提供的内容进行过滤,许多语言都有提供对HTML的过滤:
PHP的htmlentities()或是htmlspecialchars()。 Python的cgi.escape()。 ASP的Server.HTMLEncode()。 ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library Java的xssprotect(Open Source Library)。 Node.js的node-validator。 使用HTTP头指定类型 很多时候可以使用HTTP头指定内容的类型,使得输出的内容避免被作为HTML解析。如在PHP语言中使用以下代码:
<?php header('Content-Type: text/javascript; charset=utf-8'); ?> 即可强行指定输出内容为文本/JavaScript脚本(顺便指定了内容编码),而非可以引发攻击的HTML。
设置cookie时使用HttpOnly 作为纵深防护的一部分,在设置cookie时使用HttpOnly参数,有助于防止XSS脚本偷取cookie内容。因为HttpOnly限制cookie作为DOM对象存取。
PHP中的设置 PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中session.cookie_httponly设置其值为1或者TRUE,来开启全局的Cookie的HttpOnly属性。 当然也支持在代码中来开启:
<?php ini_set("session.cookie_httponly", 1); // or session_set_cookie_params(0, NULL, NULL, NULL, TRUE); ?>
Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项,开启方法为:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
使用者方面 包括Internet Explorer、Mozilla Firefox在内的大多数 浏览器 皆有关闭 Java Script的选项,但关闭功能并非是最好的方法,因为许多网站都需要使用 JavaScript 语言才能正常运作。通常来说,一个经常有安全更新推出的浏览器,在使用上会比很久都没有更新的浏览器更为安全。
查看更多关于XSS安全问题及防范 - 网站安全 - 自学php的详细内容...