如果没有其他用户会看到未转义的用户输入,渲染它是否安全

Is it safe to render unescaped user input if no other user would ever see it?

本文关键字:用户 是否 安全 输入 转义 其他 如果没有      更新时间:2023-09-26

有一个网页有一个<textarea> .

您可以在该<textarea>中键入任何文本,如果您点击提交,则键入的任何内容都会呈现在屏幕上。如果您键入<script>alert('hello')</script>并点击提交,您将收到该警报。

网页不存储键入的文本,因此您的输入无法在其他客户端(其他用户的浏览器)上呈现。

所描述的行为是否会给网页所有者或其用户带来安全风险?

由于您已经标记了此php,因此可能表单正在提交到服务器端脚本,然后输入被渲染回来。这使您容易受到反射式 XSS 攻击。

<!-- on a third party site -->
<form action="http://example.com/your_script" method="post">
<input type="hidden" name="your_field" value="attack payload">
</form>
<script>document.forms[0].submit();</script>

如果不是这种情况,并且内容使用客户端JavaScript添加到页面中并且从不从HTTP请求中读取,那么它仍然容易受到鼓励人们"只需将其复制/粘贴到文本区域中!

即使表单从未提交到服务器,这样做仍然存在风险。我在这里看到的主要风险是输入字段是否可以由外部站点填充。

考虑一个黑客的网站可以发布到你的表单,并用任意的javascript代码预先填充它。

他可以

发送任何他喜欢的JS代码,因此可以包含加载其他外部资源的代码。什么。。。。

  • 它可以完全覆盖您的页面设计以模仿另一个站点的页面设计,以进行网络钓鱼攻击。(这意味着当发现您的网站时,您的网站是被阻止的网站,而不是他的)

  • 它可以将您的网站用作发送垃圾邮件的启动板。(同上,被阻止,你真的不想最终进入垃圾邮件黑名单)

  • 它可能会使您的网站明显保持不变,但嵌入跟踪用户或利用浏览器漏洞的恶意库。(黑客经常不遗余力地将JS包含注入网站;在这里你给了他们一扇敞开的大门)

网络安全的问题在于,这是一个极其广泛的主题——有很多可能的方法可以被黑客入侵,你需要涵盖很多角度。最终,保持安全的唯一方法是始终采取最佳实践;即使你没有看到直接的方法来消除数据,你仍然应该保护它,因为最终黑客依赖于我们看不到的漏洞。

攻击者可能会强迫用户意外访问您的网站。 例如:

<form action="yourserver.com/insecure_site.php">
    ...
</form>

这允许攻击者将他想要的任何内容注入毫无戒心的用户正在访问的网站。