zoukankan      html  css  js  c++  java
  • asp.net MVC 安全性[笔记]

    1. 跨站脚本(XSS)

    1.1 介绍

    1.1.1 被动注入,利用输入html,javascript 等信息伪造链接,图片等使用提交信息,调转页面等

    1.1.2 主动注入,黑客主动参与攻击,不会傻等倒霉的用户上钩

    1.2 防御

    1.2.1 HTML 编码

    Html.Encode

    1.2.2 HTML 属性编码

    Html.AttributeEncode

    1.2.3 url 编码

    URL.Encode

    1.2.4 java script 编码

    Ajax.JavaScriptStringEncode

    1.2.5 CSS 编码

    1.3 使用AntiXSS的NuGet包

    install-package AntiXSS

    1.3.1 AntiXss使用的是白名单,而asp.net默认是黑名单,着用AntiXSS的安全性比ASP.NET 高

    1.3.2 AntiXss注重安全漏洞, asp.net注重HTML页面的不被破坏

    1.3.3 使用

    @using Microsoft.Security.Application

    @Encoder.JavaScriptEncode();

    2.请求伪造(CSPF)

    2.1 介绍

     在网站上通过图片链接等伪造银行等机构的请求(混淆代理),例如现在很多银行用的get 请求,url 会在地址栏上显示,这就给了黑客机会,黑客可以通过任何吸引你的内容,让你点击,伪造相同的请求发给银行,正好你银行在登陆状态,就可以转账盗取金钱。

    2.2 令牌验证

    通过验证用户是否资源提交站点数据来达到防御目的,可以在Html隐藏元素来实现。

    MVC 中

    @Html.AntiForgeryToken(), 会输出一个加密值作为隐藏元素

    在提交表单时,ActionFilter就会验证2个值是否匹配:

    [ValidateAntiForgertToken]

    public ActionResult Register(..)

    2.3 幂等的get 请求

    仅通过post 请求来修改数据或内容,就可有效的防御全部伪造攻击。

    2.3 HttpReferrer 验证

    ActionFilter 来阻止CSRF攻击:

    [csharp] view plaincopyprint?
     
    1. public class IsPostedFromThisSiteAttribute : AuthorizeAttribute  
    2. {  
    3. public override void OnAuthorize(AuthorizationContext filterContext)  
    4. {  
    5. if (filterContext.HttpContext != null)  
    6. {  
    7. if (filterContext.HttpContext.Request.UrlReferrer == null)  
    8. throw new System.Web.HttpException("Invalid submission");  
    9. if (filterContext.HttpContext.Request.UrlReferrer.Host !=  
    10. "mysite.com")  
    11. throw new System.Web.HttpException  
    12. ("This form wasn't submitted from this site!");  
    13. }  
    14. }  
    15. }  

    然后再Register 上面添加自定义的过滤器

    [csharp] view plaincopyprint?
     
    1. [IsPostedFromThisSite]  
    2. public ActionResult Register(…)  

    3.cookie盗窃

    3.1 介绍

    利用XSS获取用户cookie,用用户的Id登陆目标网站

    3.2HttpOnly 阻止

    web.config 里设置

    <HttpCookies httpOnlyCookies="true" ...>

    3.3单独设置httponly

    Response.Cookies["MyCookie"].HttpOnly=true;

    4.重复提交

    4.1 介绍

    MVC 尊顺命名约束把输入元素映射到模型属性中,恶意用户可以向查询字符串或提交的表单中添加其他属性(模型中存在,但用户没权操作的属性)来干预表单提交。甚至可以得到其他账户的权限。

    4.2 使用bind 特性防御重复提交,下面展示的Product 模型只能映射name 和age 属性。无权操作其他的属性。

    [Bind(Include="Name","Age")]

    pulbic class Product{

    ......

    }

    4.3 使用UpdateModel 后TryUpdataModel 的重载本版接受bind 列表。

    UpdateModel(product,"product",new string[] {"Name","Age"} ")

    4.4 避免直接绑定试图

    使用view model.

  • 相关阅读:
    memcached
    Springboot配置类
    程序员中的长期主义者-webpack
    程序员中的长期主义者-css
    程序员中的长期主义者
    h5字体样式太小引入UI库字体也很小看不清
    NodeJs正则关键字查找目录文件
    普通二维码跳转微信小程序
    git版本回滚
    绕不过的就突破
  • 原文地址:https://www.cnblogs.com/rrxc/p/4000127.html
Copyright © 2011-2022 走看看