【发布时间】:2014-03-12 16:08:11
【问题描述】:
我之前使用 PHP 和 AJAX 编写了一个简单的聊天应用程序。这样,一旦用户发送聊天,它首先会转到 php,然后从那里保存在数据库中。我在客户端使用 AJAX 定期查询数据库以获取新消息。我最终在 .
所以在我的客户端代码中,我有一个 recMsg 变量,我已将其设置为
recMsg = recMsg + value['chattime'] + ' <@' + value['chatby'] + '> ' + value['chat'] + '\r\n';
其中 value 是一个数组,其中 value['chat'] 包含实际的聊天消息。
稍后我将文本区域设置如下
$('#received').val(recMsg + $('#received').val());
其中收到的是标签的 id。 textarea 的代码(当我在浏览器中查看源代码时)是
<textarea id="received" rows="15" cols="150"></textarea>
现在尝试 xss 攻击,我输入以下内容作为我的聊天
</textarea>
<script>
alert("Hi");
</script>
<textarea>
但是它没有向我显示一个警告框,它只是在文本区域中显示完整的消息以及标签(它不会将任何标签视为特殊标签,只是将它们视为要显示的普通文本)。我尝试更改 javascript,例如 recMsg 只是聊天消息,还尝试使用 .innerHTML 但没有成功。
所以我的问题是 1) 攻击失败是因为我在渲染后更改了 textarea 的值吗?
2) 是否可以通过这种方式进行 XSS。如何更改 javascript 代码以启用此攻击?
3) 不相关的问题 - 当我使用 AJAX 更改 DOM 元素时,如果我查看源代码,我看不到任何更改(例如,在我收到几个聊天后 textarea 仍然为空)。为什么会这样?
感谢您的回复
【问题讨论】:
-
$('#received')是如何原来设置的?这里可能发生 XSS 攻击。 -
这是我唯一设置 $('#received').最初在 html 中,
-
听起来应该没问题,然后假设像
value['chattime']这样的调用是对 JSON 对象的访问。
标签: javascript jquery html ajax xss