gpt4 book ai didi

security - 我是否面临以不需要用户登录的 POST 形式进行 CSRF 攻击的风险?

转载 作者:行者123 更新时间:2023-12-03 01:20:58 25 4
gpt4 key购买 nike

我可能是个菜鸟,但我仍然不确定 CSRF(跨站请求伪造)攻击到底是什么。那么让我们看看三种情况......

1) 我有一个 POST 表单,用于编辑网站上的数据。我希望这些数据由登录的用户编辑。

2) 我有一个网站,登录用户和访客都可以使用该网站。该网站的部分内容仅供登录用户使用,但也有可供所有用户使用的 POST 表单 - 匿名用户和非匿名用户(例如标准联系表单)。是否应该保护联系表单免受 CSRF 攻击?

3)我有一个根本没有身份验证系统的网站(好吧,也许这是不现实的,所以可以说它有一个与其余部分分开的管理网站,并且管理部分得到了适当的保护) 。该网站的主要部分仅供匿名用户使用。上面的 POST 表单需要保护吗?

对于 1) 的情况,答案显然是肯定的。但对于 2 和 3 我不知道(2 和 3 之间的差异是否显着?)。

最佳答案

每当针对您的网站的恶意HTML或JavaScript被嵌入到成功执行的另一个 HTML页面(或电子邮件)中时,CSRF就会发挥作用.

以下示例被放置在另一个网页中,该网页在继续操作之前会无意中询问您的姓名和年龄:

<form action="http://yoursite.com/transferfunds" method="post">
Your name: <input type="text"><br>
Your age: <input type="text"><br>
<input type="submit">
<input type="hidden" name="amount" value="1000">
<input type="hidden" name="toaccount" value="12345678">
</form>

请注意,该操作指向您的网站,并且隐藏的输入包含所需的 POST 信息。此示例将尝试将 1000 美元(无论何种货币)的资金转移到帐号 12345678。如果您需要在表单上登录并实际进行检查,那么当然只有在不知情的用户已登录的情况下,上述操作才会成功执行最近登录过您的网站,但尚未注销,或者 session 尚未过期。

为了防止这种情况发生,最好的办法是将基于请求的 token 添加到表单中并在服务器端验证它。 IE。生成一个长的、唯一的且无法猜测的随机字符串,将其存储在 session 中并作为表单的 <input type="hidden"> 元素嵌入。提交表单后,将提交的 token 值与 session 中已有的 token 值进行比较(并立即删除 session 中的 token 值)。要更进一步,请使用 CAPTCHA

在您的特定情况下,我认为您实际上更担心 XSS ,它与 CSRF 相反,但反过来也可以是 CSRF 的来源。 XSS 的一个示例是,当用户在输入字段中输入以下内容时,该字段迟早会在同一网站上重新显示:

<form name="delete" action="admin/deleteusers" method="post"></form>
<script>document.form.delete.submit();</script>

每当您(作为管理员)查看包含(不可见!)表单和脚本的注释的页面时,它将成功执行。

预防 XSS 其实很简单。只需在网页上显示任何用户控制的输入(即请求 URL、请求 header 、请求参数和请求正文)之前对其进行 HTML 转义即可。在 PHP 中,您可以使用 htmlspecialchars() 来实现此目的,在 Java/JSP 中,可以使用 JSTL fn:escapeXml() 。这样,每个 < 将转换为 &lt;> 转换为 &gt;,这将使任何输入的 HTML/JS 将按原样显示,因此无法执行。

关于security - 我是否面临以不需要用户登录的 POST 形式进行 CSRF 攻击的风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2397952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com