跨站点脚本攻击是否与 ajax 相关?



我正在构建一个带有PHP(Codeigniter)后端的React应用程序。

由于Codeigniter似乎并没有自动解决这个问题,我开始探索这个主题。我理解为什么在 HTML 页面中呈现之前必须对用户输入进行转义,但问题是,这是否应该在仅依赖 AJAX 的应用程序中完成。

在通过 ajax 请求接收后,我尝试将此字符串输出到 React 组件的 HTML 元素中:

<script>alert('hey');</script>  

它最终只是 HTML 中的一个文字字符串。当然,没有执行任何JS。

在某些情况下,即使它是从 ajax JSON 中提取的,也可以执行这样的字符串?

在将标记发送到前端之前,最好先在后端转义标记。

让我们举个例子:

假设您将 http://example.com/get.php?userInput=<脚本称为>alert('hi');

上述请求的预期输出是"><脚本>警报('hi');"。

现在 ajax 调用正在将其转换为字符串文字,并且它不会在使用它的地方执行,但如果用户直接访问上面的 url,它将被呈现为 HTML,并且上面的脚本将被执行。在这种情况下,被攻击的人可能仍然能够窃取cookie或进行其他恶意工作。

我认为你对Cross Site Scripting (CSS)有不同的看法,CSS任何类型的编程语言都无法自动阻止。实际上,CSSjavascript代码已存储在数据库中并在显示时呈现,存储的代码可能会具有ajax调用并使用cookie数据发送到其他站点。

如果按原样打印存储的代码,则不会有任何问题。如果您像echo json_enocde($apiArray)一样打印您的 json 值,那么即使您的 api 在没有 ajax 的情况下调用(通过点击 url),您的 will 代码也不会执行,因为脚本代码隐藏在浏览器中(您可以查看它)。

是的,如果将 ajax 返回值绑定为 HTML,则可以执行代码。这就是为什么javascript框架按原样打印ajax返回的值,你必须显式编写代码来绑定html代码。如果绑定 ajax 值。

请参阅如何在 ReactJS 中绑定 HTML 在这种情况下,您的代码可以执行。

在 php 中,有 -htmlentities($values_that_need_to_be_printed_with_script_tag)按原样打印代码的函数,这不允许浏览器渲染 JavaScript 代码。

防止CSS(corss site scripting)的简单方法是按原样打印数据 - 不允许浏览器呈现存储在数据库中的代码。

最新更新