Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AJAX服务上的跨站点伪造_Ajax_Security_Xss - Fatal编程技术网

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”

这是一个用户枚举漏洞

你知道这些问题吗

以下是您的新流程:

  • 使用电子邮件地址作为用户名

  • 使用CAPTCHA防止注册表单的自动化

  • 电子邮件用户名不存在:

    显示“成功”消息。通过一次性链接向地址发送电子邮件。使用该链接返回您的站点后注册用户

    电子邮件用户名确实存在:

    显示“成功”消息。向该地址发送电子邮件,并显示消息“有人正在尝试使用此地址创建帐户,但该帐户已存在”

    你搞混了

    给出的解决方案是服务器生成的“防伪”令牌, 以隐藏形式将任何请求发回。那是
    很酷,但要阻止黑客下载表单页面, 提取令牌并发布它

    假设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" />