实例:详解跨站脚本攻击的攻与防
<META http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"> |
过滤和限制所有输入的数据
当用户在进行登录的时侯,不要让那些特殊的字符也输入进去。因此我们可在ONSUBMIT方法中加入JAVASCRIPT程序来完成这个功能。例如,我们限制最多只能输入15个字符,这样可以阻止那些较长的script的输入。 微软提供了一个简短的Javascript程序来完成对输入数据的过滤。结合上面的实例,我们来看如下代码:
function checkForm() { document.forms[0].userName.value = _ RemoveBad(document.forms[0].userName.value); return true; } // MICROSOFTS CODE function RemoveBad(strTemp) { strTemp = strTemp.replace(////"////%//;//(//)//&//+//-/g,""); return strTemp; } |
用这个办法,可以过滤在输入中含有 % < > [ ] { } ; & + - " ( ) 的这些字符。
使用HTML和URL编码
尽管使用过滤和限制输入的办法是一种非常重要用防御手段,但却不是万能的。针对某些特殊情况,如URL的参数直接放在邮件中,我们不得不采取一种更有力的安全措施。如我们用的ASP,解决起来相对容易些,只要对动态生成的页面进行HTML和URL编码就OK。针对我们例子中的情况,在第一输入页中我们对redirect URL作了如下改动:
strRedirectUrl = strRedirectUrl & _ server.URLEncode(Response.Cookies("userName")) |
在执行页中我们加入:
strUserName =server.HTMLEncode(Request.QueryString("userName")) strUserName =server.HTMLEncode(Request.Form("userName")) 微软推荐对所有动态页面的输入和输出都应进行编码,甚至在对数据库数据的存入和取出也应如此,这样可以在很大程度上避免跨站脚本攻击。 要做到这些还要在Page1.asp中加入: |
- 戴尔推出中小企业服务器R300与T300(02-22)
- 蓝色基因GL-1120服务器突破1U服务器性价比极限(02-23)
- 64位线程!SUN 富士通扩展SPARC产品线(03-13)
- 处理器主频超5GHz IBM新推高端P595服务器(03-10)
- MemoRight推GT系列128G高速SSD(03-24)
- 日本推出手持式极端环境Linux服务器(03-25)