Javascript 跨站点脚本攻击与ajax相关吗?

Javascript 跨站点脚本攻击与ajax相关吗?,javascript,php,ajax,xss,Javascript,Php,Ajax,Xss,我正在使用PHP(Codeigniter)后端构建一个React应用程序 由于Codeigniter似乎没有自动处理这个问题,我开始探索这个主题。我理解为什么在HTML页面中呈现之前必须转义用户输入,但问题是,这是否应该在完全依赖AJAX的应用程序中完成 在通过ajax请求接收到该字符串后,我尝试在React组件的HTML元素中输出该字符串: <script>alert('hey');</script> alert('hey'); 它最终在HTML中只是一个文本字

我正在使用PHP(Codeigniter)后端构建一个React应用程序

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

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

<script>alert('hey');</script>  
alert('hey');
它最终在HTML中只是一个文本字符串。当然,没有执行JS


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

在将其发送到前端之前,最好在后端执行escap标记

让我们举一个例子:

假设您调用


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

我认为您对跨站点脚本(CSS)的理解不同,
CSS
无法通过任何编程语言自动阻止。实际上,在
CSS
javascript代码已经存储在数据库中,并在显示时进行渲染,存储的代码可能具有ajax调用,并使用cookie数据发送到其他站点

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

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

在这种情况下,可以执行代码

在php中有-
htmlentities(\u需要\u打印\u和\u脚本\u标记的值)
函数按原样打印代码,这不允许浏览器呈现javascript代码


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

浏览器会阻止它执行。Praveen:那么我可以完全忽略这个问题吗?我真的相信。您是否有这样一个实例:您以这种方式包含来自不同域的脚本并执行它?不,我没有。但我也没有经验……我的意思是,在这个网站上看到谦虚是很少见的:-)让我知道它是否对你有帮助?如果不是的话,我会给你提供更多的资源。嗯,我还是有点困惑:非常有趣的例子…没有考虑过很多次,特别是对于现代的单页应用程序,在服务器上实现编码是一种反模式。大多数情况下,最好按原样向客户机发送数据(显然,编码为传输格式,即json),然后客户机可以根据使用的位置决定需要进一步的编码。关键是它不一定是html编码,服务器应该没有办法知道。当然,部分html应该转义。如果内容类型为text/json并且发送了x-content-type-options:nosniff,则直接访问将不会受到攻击。