gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 16:32:07 25 4
gpt4 key购买 nike

考虑以下情况:

  • 我向 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/

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