XSS
Posted 日月草方的专栏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSS相关的知识,希望对你有一定的参考价值。
1.XSS的防范
XSS是一种热门的攻击手段,英文名为Cross site scripting 中文翻译为跨网站脚本攻击。攻击通常是javascript所造成,最偏变的攻击手段是窃取用户的Cookies ,进而以该用户的身份执行其他网页的权限,原理就是利用植入到页面的脚本,将用户的cookies传到其他的主机,黑客就可以利用cookies来伪造已经登录的正常用户。
虽然原生的Asp.Net 会阻挡用户从表单输入脚本的行为,但是网站开发难免会遇到要让用户输入html的 需求,比如留言板文字要有颜色,或是网站后台需要上传稿件等,因为需求开发人员就会解除asp.net的默认的安全措施,比如:asp.net mvc中,只要对action打上属性ValidateInput(false)就可以解除对此action的脚本检查,但是这样的写法开放了所有的指令,用户不管输入什么都可以,很危险。
2.有效防范XSS
.net fremework4.5 默认纳入开发很久的AntiXSS Library 顾名思义就是专门拿来防范XSS攻击的。AnitXss的类名称为AntiXssEncoder,此类提供以下方法:
CssEncode,HeaderNameValueEncode,HtmlAttributeEncode,HtmlDecode,HtmlEncode,HtmlFormUrlEncode,JavaScriptStringEncode
3.防止网站伪造请求
跨网站伪造请求(Cross-site request forgery)缩写为CSRF或是XSRF,和XSS不同之处,CSRF是伪造授权用户的请求来实施攻击。开发网站的开发者一定要记住的概念就是前端传递至后台的任何数据都不能相信,前端的数据
十分容易的篡改与伪造,防范方式有几种,介绍几种简单的方式:
(1)要提交到后台的数据用post方式不用get,敏感数据一定不要用get,且方法打上[httpPost]动作过滤器,限制仅post能访问;
(2) 在窗体中插入包含特定值的隐藏字段,提交后台后判断其来源是否正确
微软意识到这个常见防范需求扩展了一个方法Html.AntiForgeryToken(),使用相当简单,只需要在View页面的form里面放置Html.AntiForgeryToken(),在后台的控制器方法上面打上ValidataAantiForgeryToken动作
过滤器,就可以完成防范功能,此机制的防范原理就是用户进入页面时会产生一份名为_RequestVerficationToken的cookie,内容包含一些特殊的信息并且编码过,当用户对后台发送请求时会先检查是否有
防伪造验证专用的cookie,若有再检查内容值是否正确,正确了才通过.
使用步骤如下:
1、在Html表单里面使用了@Html.AntiForgeryToken()就可以阻止CSRF攻击。
2、相应的我们要在Controller中也要加入[ValidateAntiForgeryToken]过滤特性。该特性表示检测服务器请求是否被篡改。注意:该特性只能用于post请求,get请求无效。
3、至于js,我们的项目中引用的是<script src="@Url.Content("~/Content/js/jqueryToken-1.4.2.js")" type="text/JavaScript"></script>
在JS时要使用: $.ajaxAntiForgery才行,
如:
$.ajaxAntiForgery({
type: "post",
data: { GroupName: $("#GroupName").val(), GroupPhones: $("#GroupPhones").val() },
dataType: "json",
url: "/Event/Mass/AddGroup",
success: function (data) {
if (data) {
alert("添加成功 ");
$.unblockUI();
}
else {
alert("添加失败 ");
}
}
})
以上是关于XSS的主要内容,如果未能解决你的问题,请参考以下文章