给定一个网站,如何检测潜在的CSRF漏洞?
提前致谢
答案 0 :(得分:3)
这是CSRF攻击: -
受害者被诱骗浏览的www.evil.com
页面包含以下代码: -
<form method="post" action="https://www.example.com/executeAction">
<input type="hidden" name="action" value="deleteAllUsers">
</form>
<script>document.forms[0].submit()</script>
当受害者以管理员用户身份登录到您的网站(www.example.com
)时,表单提交正常,所有用户都将从您的系统中删除。
Synchronizer Token Pattern是修复此漏洞的推荐方法。当存储在服务器端并与用户会话配对的合法用户加载到您的网站上时,这将为您的表单添加一个加密安全的随机字符串称为令牌。提交表单后,系统将检查POSTed标记是否与预期的标记匹配。任何攻击者都无法从您的网站读取令牌,因为任何跨网站访问都受Same Origin Policy保护。
网络安全扫描程序通常可以检测到您网站上的这类漏洞。您可以通过检查浏览器机制提交的表单来手动检查,以确定它们是否包含令牌字段。但是,AJAX提交可能会使用其他方法,例如the Origin
header or X-Requested-With
。
答案 1 :(得分:1)
您需要了解什么是CSRF才能检测CSRF漏洞。
CSRF是一种攻击,它迫使最终用户在他/她当前经过身份验证的Web应用程序上执行不需要的操作。在社交工程的帮助下(比如通过电子邮件/聊天发送链接),攻击者可能会诱骗Web应用程序的用户执行攻击者选择的操作。
当后端应用程序没有故意检查客户端发出的表单时,会出现基本的CSRF漏洞。为了理解有意或无意地发出请求,您需要以html格式使用令牌,然后在后端检查该令牌。
例如:
<form action="/setting/emailchange.php">
<input type="hidden" name="csrf_token" value="RANDOM_STRING_HERE"
<input type="text" name"email" value="" placeholder="Type new email">
</form>
您会看到一个名为&#34; csrf_token&#34;的隐藏输入字段。作为攻击者,我们无法预测该值,因为它为相关用户生成并存储在会话中。如果没有有效的csrf_token值,后端应用程序将不会处理该请求。
因此,如果您没有在html表单中看到任何csrf令牌,则意味着它可能容易受到CSRF的攻击。</ p>