javascript - 使用AJAX并设置innerHTML安全吗?

标签 javascript php ajax xss innerhtml

考虑以下情况:

  • 我向 PHP 发送一个 AJAX 请求(无用户输入),PHP 启动了一个函数。
  • 该函数返回原始 HTML 字符串。可以是任何东西 - 链接列表、一堆空 div、要内联插入的 SVG、页面的大部分内容...在其创建过程中不使用用户输入数据。
  • 我收到字符串作为响应并将其插入到 分区。
  • 我(目前并且希望继续)使用纯 JS - 无库

既然 JS 存在一定程度的不安全性,那么我刚刚所做的事情有多不安全呢?

OWASP XSS Cheat Sheet说要逃避所有“不可信数据”。鉴于上述情况,我的 AJAX 请求的结果是否不受信任?任何 AJAX 请求的结果是否被视为“不受信任”?

以这种方式插入 HTML 是不好的做法吗?如果是这样我应该做什么?

编辑以澄清一些事情:

  • AJAX 请求中的 URL 变量仅用于在服务器上启动 PHP 函数。根本没有变量传递给该函数(具体来说,我正在使用 Joomla 的 com_ajax 组件)。
  • 所有返回的代码都是静态的,由我编写。

最佳答案

只要响应是真正静态的并且不涉及任何类型的用户输入,就可以了。 AJAX 本身(正如您所暗示的)不会使其容易受到 XSS 攻击(只要传输是安全的,这实际上意味着 https)。

一个警告(不一定针对您的情况,但一般而言)可能是您认为用户输入的内容和不考虑的内容。您的应用程序总是接收来自用户的输入,或者它可能使用之前接收到的参数,甚至是其他应用程序接收的参数。即使不传递参数,也可以从数据库读取请求 header 、cookie(如果有)和用户输入。即使它看起来像数据库中的静态数据,在某些时候它也可能源自某种用户,可能是合法(但流氓)用户,或外部攻击者,或者它可能来自写入到的另一个应用程序相同的数据库(无论如何都不是一个好的做法)。

所以简而言之,如果您发送回的数据实际上只是静态数据(如硬编码),那么它并不容易受到攻击,但是有很多方法可以使其变得动态,从这里开始,这是您的(理想情况下基于风险的)决定,您要防范什么以及您信任什么。

最佳实践是默认对所有内容进行编码以避免错误。如果您确定信任要以 HTML 形式插入到 DOM 中的数据源,那就没问题。威胁建模可能有助于发现您应该信任什么、不应该信任什么,但在某些情况下,它也可能是显而易见的。

关于javascript - 使用AJAX并设置innerHTML安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39710380/

相关文章:

javascript - get_browser 不适用于 PHP 中的 IF 语句

javascript - jQuery 重置 setInterval 定时器

php - 使用先前值加上当前值更新每一行

php - 使用 glob() 显示目录中的图像,同时回显唯一的第一张图像

Jquery 将值传递给 Controller ​​(codeigniter)

javascript - JS 图像未显示在 Canvas 上

javascript - Node.js - 解析 XML 时方法返回 UNDEFINED

php - Laravel 中的数据库结构

javascript - AJAX - 向用户显示连接的当前状态

php - 在 onchange 上调用 2 个 JS 函数并且都返回一些值