跨站点请求伪造 (着急)

kke_007 2018-07-17 05:20:21
首先第一步--》生成验证码Tonk
/// <summary>
/// 生成 Token
/// </summary>
/// <returns></returns>
protected string OnGetTonk()
{
///生成 Token
string Token = new Random().NextDouble().ToString();
Session["token"] = Token;
return Token;
}

第二步页面生成Tonk
<input type="hidden" name="token" id="token" value="<%=OnGetTonk() %>" />

第三步页面AJAX提交
function onSave() {

var login_id = $("#txtlogin_id").val();
var pwds = $("#txtpwd").val();
var user_name = $("#txtuser_name").val();
var mobile_phone = $("#txtmobile_phone").val();
var IdCard = $("#txtIdCard").val();

var parma={
"login_id":login_id,
"pwds": pwds,
"user_name":user_name,
"mobile_phone":mobile_phone,
"IdCard":IdCard,
"token": $("#token").val()
};

byshow.GetJSON("onSave", parma, function (r) {
if (r == "Token空请求不合法") {
top.$.messager.alert("Token空请求不合法")
return;
}
if (r == "请求不合法") {
top.$.messager.alert("请求不合法")
return;
}

if (r == "1" || r == 1) {
window.location.href = "login.aspx";

}
else {
top.$.messager.alert("保存失败", '保存失败,请联系管理员', 'warning');
}

});
}

第四步 AJAX提交过来的程序验证
BusinessResult br = new BusinessResult();
string Token = GetToString("token");
if (string.IsNullOrWhiteSpace(Token) || Session["token"] == null)
{
br.Data = "Token空请求不合法";
}
else if (Token != Session["token"].ToString())
{
br.Data ="请求不合法";
}
else
{
业务逻辑
}


但是扫描还是有“跨站点请求伪造 ”漏洞
...全文
486 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
丰云 2018-07-18
  • 打赏
  • 举报
回复
你这token直接页面就可以取到,形同虚设啊。。。。

建议加上referer验证吧
kke_007 2018-07-18
  • 打赏
  • 举报
回复
引用 1 楼 dongshanyu 的回复:
在Page_Init事件中添加以下代码:
Me.Page.ViewStateUserKey = Session.SessionID

跨站点请求伪造,我前一段时间是按上述方法处理的,你看看对你项目是否有效

之前没多大用加了
江湖评谈 2018-07-18
  • 打赏
  • 举报
回复
在 form提价里面加上 @Html.AntiForgeryToken("647B8734-EFCA-4F51-9D98-36502D13E4E7")
palhotel 2018-07-18
  • 打赏
  • 举报
回复
你说的是CSRF吗?那你应该网页上每个表单,每个ajax请求,都带上你生成的这个token,或者是其他的hidden input,不仅仅是登录时候。
CSRF举个例子是这样用的,先假设你每天都在玩的一个社交网站有漏洞,我给你发个链接,甚至是Email,引诱你打开,你打开网页以后,我的网页自动发了一个请求给这个社交网站,由于是你自己电脑发出的,用的你自己的cookie,是完全合法的,会让你关注谁谁谁,甚至是发个帖子,转个积分给黑客。只有你在每个表单都加生成的token,我伪造的表单、网页是拿不到的,后台去验证他就可以了。refer也可以作为补充,因为被攻击者用自己的浏览器去发,浏览器是不会改refer的,还是可以的。
dongshanyu 2018-07-17
  • 打赏
  • 举报
回复
在Page_Init事件中添加以下代码:
Me.Page.ViewStateUserKey = Session.SessionID

跨站点请求伪造,我前一段时间是按上述方法处理的,你看看对你项目是否有效

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧