当前位置: 首页 > news >正文

娄底企业网站建设制作/公司网站建设哪家公司好

娄底企业网站建设制作,公司网站建设哪家公司好,360度街景实景地图下载,任何判断网站SEO做的好坏简介MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)攻击的一个措施,它跟XSS(XSS又叫CSS:Cross-Site-Script),攻击不同,XSS一般是利用站内信任的用户在网站内插入恶意的脚本代码进行攻击,而CSRF则是伪造成受信任用户对网站…

简介

MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)攻击的一个措施,它跟XSS(XSS又叫CSS:Cross-Site-Script),攻击不同,XSS一般是利用站内信任的用户在网站内插入恶意的脚本代码进行攻击,而CSRF则是伪造成受信任用户对网站进行攻击。

CSRF可以攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

实例

  我们新建一个简单的网站发布公告界面

@{Layout = null;
}<!DOCTYPE html><html>
<head><meta name="viewport" content="width=device-width" /><title>Index</title>
</head>
<body>@using (Html.BeginForm("Notice", "Home", FormMethod.Post)){@:网站公告:<input type="text" name="Notice" id="Notice" /><input type="submit" value="Submit" />}
</body>
</html>

1

提交后

2

此时提供给了跨站攻击的漏洞,CSRF一般依赖几个条件

(1)攻击者知道该目标站点。

(2)攻击者的目标站点具有持久化授权cookie或者受害者具有当前会话cookie

(3)目标站点没有对用户在网站行为的第二授权。

比如我们现在知道发布新闻的地址:http://localhost:56874/Home/Notice

比如我们新建一个页面

@{Layout = null;
}<!DOCTYPE html><html>
<head><meta name="viewport" content="width=device-width" /><title>Index</title>
</head>
<body><form action="http://localhost:56874/Home/Notice" method="post">网站公告:<input type="text" name="Notice" id="Notice" /><input type="submit" value="Submit" /></form>
</body>
</html>

发起攻击

3

这样在网站的公告就被篡改了。作为安全性考虑,这种情况肯定不会让它发生的。

如何防止

ASP.NET MVC中通过在页面上使用 Html.AntiForgeryToken()配合在对应的Action上增加[ValidateAntiForgeryToken]特性来防止跨站攻击。

修改上面提交代码

@using (Html.BeginForm("Notice", "Home", FormMethod.Post)){@Html.AntiForgeryToken();@:网站公告:<input type="text" name="Notice" id="Notice" /><input type="submit" value="Submit" />}
[HttpPost][ValidateAntiForgeryToken]public ActionResult Notice(string Notice){ViewBag.Notice = Notice;return View();}

再次运行网站,界面没什么变化当我们查看源代码的时候发现多了一个东西

<input name="__RequestVerificationToken" type="hidden" value="oo1kDYx6CUL3YSyZHokvWgPzOcZhZID_75tiqYBgNMBBjQNo4FgmWpO5dRsVlvqIVgZH34FvTArCFbWKuDkCbwl5UFOAxzxmaTwuQ9iBBHY1" />

现在当我们再次篡改数据的时候

我们看一下Html.AntiForgeryToken()会为当前请求,生成一个名为__RequestVerificationToken的cookie,还有一个名为__RequestVerificationToken的隐藏域。

为了验证一个来自form post请求,还需要在目标action上增加[ValidateAntiForgeryToken]特性,它是一个验证过滤器,它主要检查

(1)请求的是否包含一个约定的AntiForgery名的cookie

(2)请求是否有一个Request.Form["约定的AntiForgery名"],约定的AntiForgery名的cookie和Request.Form值是否匹配

Ajax如何CSRF攻击

在Asp.net Mvc里加入防伪标记很简单在表单中加入Html.AntiForgeryToken()即可。

Html.AntiForgeryToken()会生成一对加密的字符串,分别存放在Cookies 和 input 中。

我们在ajax post中也带上AntiForgeryToken

<head><meta name="viewport" content="width=device-width" /><title>Index</title><script src="~/Script/jquery-1.10.2.min.js"></script>
</head>
<body><form>网站公告:<input type="text" name="Notice" id="Notice" /><input type="button" value="提交" id="btn" /></form>
</body>
</html>
<script>$(function () {$("#btn").click(function () {var token = $('@Html.AntiForgeryToken()').val();var headers = {};headers["__RequestVerificationToken"] = token;$.ajax({type: 'POST',url: '/Home/Notice',cache: false,headers: headers,data: { Notice: $("#Notice").val()},success: function (data) {alert(data)},error: function () {alert("Error")}});})})
</script>

自定义ValidateAntiForgeryToken

public class MyValidateAntiForgeryToken: AuthorizeAttribute{public override void OnAuthorization(AuthorizationContext filterContext){var request = filterContext.HttpContext.Request;if (request.HttpMethod== WebRequestMethods.Http.Post){if (request.IsAjaxRequest()){var antiForgeryCookie = request.Cookies[AntiForgeryConfig.CookieName];var cookiValue = antiForgeryCookie != null ? antiForgeryCookie.Value : null;var s = request.Headers["__RequestVerificationToken"];AntiForgery.Validate(cookiValue, request.Headers["__RequestVerificationToken"]);}else{new ValidateAntiForgeryTokenAttribute() .OnAuthorization(filterContext);}}}}

修改HomeController Notice方法

[HttpPost]//    [ValidateAntiForgeryToken]
        [MyValidateAntiForgeryToken]public ActionResult Notice(string Notice){ViewBag.Notice = Notice;return Json(new { message = Notice });}
这样就防止了ajax post数据到服务器不加防伪标记,造成CSRF攻击

转载于:https://www.cnblogs.com/studydp/p/9675425.html

http://www.lbrq.cn/news/1383247.html

相关文章:

  • 做初中数学题的网站/淘宝推广方法有哪些
  • 成都建站开发/网络营销ppt模板
  • 如何做新闻源网站/信息流优化师培训
  • 大都会app约/站群seo
  • 重庆网站制作机构/朋友圈营销广告
  • 山西运城给网站做系统的公司/电商平台排行榜
  • 视频网站开发视频/电商运营怎么自学
  • 网站建设报价word文档/千川推广官网
  • 浪起网站建设/优化推广联盟
  • 武汉做企业网站/如何自己开发软件app
  • 建设厅网站如何查询企业信息/莆田百度快照优化
  • 高端的科技网站建设/软文推广案例大全
  • 游戏网站开发公司/广州seo推广
  • 定制一款app/咖啡seo是什么意思
  • 如何开发网站自己做站长/外包公司的优势和劣势
  • 怎样搭建web网站/电商网站建设报价
  • 绍兴网站建设设计/西安网站制作费用
  • 外贸网站推广 上海/网站推广优化排名公司
  • 网站制作价格便宜/aso关键词覆盖优化
  • 网站里的横幅怎么做/天津疫情最新情况
  • 电脑微信公众号登录入口/seo线上培训多少钱
  • flash做导航网站/网站推广的作用在哪里
  • 织梦贷款网站模板/中国今天刚刚发生的新闻
  • 床伸舌头哔哩哔哩原声/东莞seo技术
  • 河南网站推广/微信指数是搜索量吗
  • 网站免费源码大全/衡水网站优化推广
  • 个人做的网站不能做淘客/谷歌推广和seo
  • 武汉网页制作模板/云南网站建设快速优化
  • 做企业的网站都要准备什么东西/seo排名的方法
  • 郑州网站建设推销/社会新闻最新消息
  • 20250730在荣品的PRO-RK3566开发板的Android13下调通敦泰的FT8206触控芯片【I2C的挂载】
  • LLMs之Agent:GLM-4.5的简介、安装和使用方法、案例应用之详细攻略
  • 剧本杀系统 App 开发:科技赋能,重塑剧本杀游戏体验
  • Ubuntu卡在启动画面:显卡驱动与密码重置
  • SpringBoot整合RocketMQ(rocketmq-client.jar)
  • 机器学习sklearn:决策树的参数、属性、接口