1 背景 2 缩写 3 测试方法 4 实例 5 避免的方法 5.1
程式设计方面 5.2 使用者方面
当
网景(Netscape)最初推出JavaScript语言时,他们也察觉到准许网页伺服器传送可执行的程式码给一个浏览器的安全风险(即使仅是在一个浏览器的沙盒里)。它所造成的一个关键的问题在于使用者同时开启多个浏览器视窗时,在某些例子里,网页里的片断程式码被允许从另一个网页或物件取出资料,而因为恶意的网站可以用这个方法来尝试窃取机密资讯,所以在某些情形,这应是完全被禁止的。为了解决这个问题,浏览器采用了与最初相同的决策──允许来自相同
网域名称系统和使用相同协定的物件与网页之间的任何互动。这样一来,恶意的网站便无法借由JavaScript在另一个浏览器窃取机密资料。此后,为了保护使用者免受恶意的危害,其他的浏览器与伺服端指令语言采用了类似的存取控制决策。一般而言,跨网站 指令码的漏洞常见于网页允许攻击者通过这些机制的弱点。由于发现了巧妙的注入恶意的指令码到由其他网域服务的网页方法,攻击者可得到了更高的特权,窃取机密的网页内容、会谈的cookie、以及许多其他的物件。
Cross-site scripting的缩写是CSS,但因为CSS在网页设计领域已经被广泛指
层叠样式表(Cascading Style Sheets),所以将Cross改以发音相近的X做为缩写。但早期的文件还是会使用CSS表示Cross-site scripting。
通常有一些方式可以测试网站是否有正确处理特殊字元: > /*
*/ ='> /*
*/ /*
*/ /*
*/ %3Cscript%3E alert('XSS')%3C/script%3E /*
*/
(这个仅限 IE 有效) 使用者可做一个网页,试着用JavaScript把document.cookie当成参数丢过去,然后再把它记录下来,这即是偷 cookie 。
XSS攻击方法有: 偷 cookie 。 利用 i frame 或 frame 存取管理页面或后台页面。 利用
XMLHttpRequest 存取管理页面或后台页面。
网路上的一些知名网站如Google、MySpace、Xuite以及 无名小站等曾被发现到XSS漏洞。
避免XSS的方法主要是将使用者所提供的内容进行过滤,许多语言都有提供对HTML的过滤: PHP的htmlentities()或是htmlspecialchars()。 Python的cgi.escape()。 ASP的Server.HTMLEncode()。 ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library
包括Internet Explorer、Mozilla Firefox在内的常用浏览器皆有关闭JavaScript的功能,但关闭未必是最好的方法,许多网站都会使用JavaScript语言。
收藏