XSS 攻击在 textarea 标签中不起作用

Har*_*sha 3 html javascript xss ajax jquery

我之前使用 PHP 和 AJAX 编写了一个简单的聊天应用程序。这样,一旦用户发送聊天,它首先会转到 php 并从那里保存在数据库中。我在客户端使用 AJAX 定期查询数据库以获取新消息。我最终在 .

所以在我的客户端代码中,我有一个 recMsg 变量,我已将其设置为

recMsg = recMsg + value['chattime'] + ' <@' + value['chatby'] + '> ' + value['chat'] + '\r\n';
Run Code Online (Sandbox Code Playgroud)

其中 value 是一个数组,其中 value['chat'] 具有实际的聊天消息。

后来我设置文本区域如下

$('#received').val(recMsg + $('#received').val());
Run Code Online (Sandbox Code Playgroud)

其中收到的是标签的 ID。textarea 的代码(当我在浏览器中查看源代码时)是

<textarea id="received" rows="15" cols="150"></textarea>
Run Code Online (Sandbox Code Playgroud)

现在尝试 xss 攻击,我输入以下内容作为我的聊天内容

</textarea>
<script>
alert("Hi");
</script>
<textarea>
Run Code Online (Sandbox Code Playgroud)

但它没有向我显示警告框,它只是在 textarea 中显示完整消息以及标签(它不会将任何标签视为特殊标签,而只是将它们视为要显示的普通文本)。我尝试更改 javascript 这样的 recMsg 只是聊天消息,也尝试使用 .innerHTML 但没有成功。

所以我的问题是 1) 攻击是否失败是因为我在呈现 textarea 后更改了它的值?

2)是否可以通过这种方式进行XSS。如何更改 javascript 代码以启用此攻击?

3) 无关问题——当我使用 AJAX 更改 DOM 元素时,如果查看源代码,我看不到任何更改(例如,在我收到几次聊天后,textarea 仍然是空的)。为什么会这样?

感谢您的回复

Osc*_*Paz 5

  1. 您的攻击失败了,因为您正在设置valuetextarea的属性。浏览器会自动为您转义字符。认为,当您在 textarea 上书写时,书写</textarea>不会关闭它。通过javascript设置值是一样的。
  2. 如果您希望此攻击成功,则必须更改$('#received').val(recMsg + $('#received').val());$('#received').html(recMsg + $('#received').html());。这将改变innerHTMLtextarea的属性。虽然我不确定它会正常工作。你必须尝试一下。
  3. 浏览器的“查看源代码”选项仅显示您从服务器下载的内容。如果您想查看实时更改,则需要打开他们的开发人员工具(通常按F12)。您将看到一个包含整个 DOM 树及其样式属性的检查器。