AJAX服务上的跨站点伪造
对于如何防止跨站点伪造,我有点困惑。还是。我知道外面有很多信息,但我很困惑 他在书中描述了这样一种形式:AJAX服务上的跨站点伪造,ajax,security,xss,Ajax,Security,Xss,对于如何防止跨站点伪造,我有点困惑。还是。我知道外面有很多信息,但我很困惑 他在书中描述了这样一种形式: <body onload="document.getElementById('fm1').submit()"> <form id="fm1" action="http://yoursite/UserProfile/SubmitUpdate" method="post"> <input name="email" value="hacker@
<body onload="document.getElementById('fm1').submit()">
<form id="fm1" action="http://yoursite/UserProfile/SubmitUpdate" method="post">
<input name="email" value="hacker@somewhere.evil" />
<input name="hobby" value="Defacing websites" />
</form>
</body>
然后提交给/isusernameavable?token=4uru32br&partialUsername=usernam
我从何而来?防伪令牌不是随机代码。也不是用于多个请求的重用令牌 相反,服务器将令牌与呼叫者的ip地址或会话进行耦合,例如通过使用服务器密钥加密ip+salt 因此,如果攻击者试图从您的站点下载令牌,则实际客户端将无法使用该令牌 如何阻止黑客下载表单页面、提取令牌并发布 这个,就是这个 我想要一个AJAX函数,它将当前输入的用户名发送到服务器,如果该用户名可用或不可用,服务器将响应“True/False” 这是一个用户枚举漏洞 你知道这些问题吗 以下是您的新流程:
很酷,但要阻止黑客下载表单页面, 提取令牌并发布它 假设Bob是您站点上的普通用户 查克是个邪恶的攻击者 Bob进入您的站点并提交评论表单(在您的代码示例中)。如果有CSRF保护,此表单中也包含一个令牌:
<input type="hidden" name="csrf_token" value="zxcvbnnmm1235152" />
如果Chuck下载该页面,以某种方式让Bob(例如,向他发送电子邮件)访问Chuck服务器上的该页面,因为csrf\u令牌与Bob不匹配,Chuck无法以Bob的身份发布消息
Bob可以很好地继续,因为表单中的令牌与他的会话相关联的令牌匹配
CSRF是关于阻止Chuck使用Bob的浏览会话以Bob的身份提交内容
我的申请是:在注册我的网站时,我想
将当前输入的用户名发送到
如果可用或不可用,应响应“真/假”的服务器。
这种情况发生在key上,因此用户可以选择一个尚未注册的用户名
已经用过了。当所有条件满足时,“提交”按钮将启用
满足“新用户”的要求
显然,这是黑客利用该服务进行攻击的机会
“测试”大量用户名,看看它们是否可用-我知道不是
确实是网上银行的风险,但我还是想
仅服务来自我的应用程序的请求,而不是黑客
是,这是您的用户枚举漏洞
将用户名作为电子邮件,并遵循如何使其安全。“但如何阻止黑客下载表单页面、提取令牌并发布它?”黑客将下行他自己的令牌而不是受害者的令牌。还要注意,CSRF令牌不会阻止登录尝试,因为这与请求伪造完全不同。“防伪令牌不是随机代码”。为什么不呢?因为如果服务器必须将所有令牌与客户端ip存储在一起,我想存储起来会很困难。尤其是在允许支持和重新上市的情况下。向客户端发送加密状态更便宜。好的,我得到的令牌是一次性代码。我认为没有办法避免使用密钥“捕获”上述场景-如果我错了请纠正我-我认为唯一的方法是按照建议限制结果;一个作为表单令牌,另一个作为cookie,将只提交到同一个域。通过将cookie设置为html,只有javascript才能有效地阻止获取cookie,从而提高安全性。
<input type="hidden" name="csrf_token" value="zxcvbnnmm1235152" />
<input type="hidden" name="csrf_token" value="lklkljlk898977" />