ASP.NET MVC 网站安全性
应用程序的构建基于这样一个假设, 即只有特定用户才能执行某些操作,而其他 用户则不能执行这些操作。 开发人员希望的应用程序使用方式和黑客的使用方式之间有一条不可逾越的鸿沟。
XSS 跨站脚本攻击
HTML 与 Javascript 注入
防御策略:
- HTML 编码 @Html.Encode
- Javascript 编码 @Ajax.JavaScriptStringEncode
- 使用 AntiXss 库
CSRF 跨站请求伪造
被害人在浏览器中登录受信站点 A,验证通过并在浏览器产生 Cookie,在未退出站点的情况下打开风险网站 B,风险网站 B 向受信站点 A 发起请求,由于浏览器会自动附加 Cookie,所以请求会按被害人的权限进行处理。
CSRF 示例:
以下演示对政务 BingHandTree 接口(POST类型,包含身份验证)进行请求,使用注释部分代码即可在页面加载时提交,使被害人无法察觉:
<html>
<head>
<script type="text/javascript">
//function steal() {
// document.getElementById("steal").submit();
//}
</script>
</head>
<!--<body οnlοad="steal()">
<form id="steal" method="POST" name="transfer" action="http://localhost/website/Case/BingHandTree" style="display:none">-->
<body>
<form id="steal" method="POST" name="transfer" action="http://localhost/website/Case/BingHandTree">
流程编号(PID):<input type="text" name="PID" value="11523" /><br />
移交方向(HandDirect):<input type="text" name="HandDirect" value="1" /><br />
回退节点(RebackAID):<input type="text" name="RebackAID" value="-1" /><br />
显示用户(ShowUser):<input type="text" name="ShowUser" value="0" /><br />
<input type="submit" value="确定" />
</form>
</body>
</html>
防御策略:
- 验证来源地址 Request.UrlReferrer
- 防伪令牌 @Html.AntiForgeryToken()
Cookie 盗窃
利用 XSS 漏洞盗取 Cookie。
防御策略:
- 禁止 Javascript 操作 Cookie Response.Cookies[“Sample”].HttpOnly = true;
重复攻击
后台接口接收一个对象时,向提交参数中加入这个对象类型包含的属性,来提交额外的参数。
防御策略:
- 使用模型绑定 BindAttribute
- 自定义视图模型
开放重定向
利用登录重定向的原理,通过诱导被害人点击包含危险地址的重定向链接,使用户通过登录认证后进入危险网站。
防御策略:
- 验证重定向链接 Url.IsLocalUrl(returnUrl)