今天我注意到,当我访问我的网站时,它会显示alert(1);
,并重定向任何人转到该网站以及其他网站。
我知道这是一个JavaScript漏洞,所以我一次取出一些代码,然后发现下面的代码是造成漏洞的原因。
var all_chats = setInterval(function() {
$.ajax({
url: './requests/chat.php',
type: 'POST',
success: function(chats) {
$('.chat').html(chats);
}
});
}, 1000);
chat.php文件是这样的:
<?php
require '../includes/functions.php';
?>
<table width='100%' border='0' cellspacing='0' cellpadding='0' class='resultsTable'>
<thead>
<tr>
<td>NAME</td>
<td>TIME</td>
<td>CONVERSATION</td>
</tr>
</thead>
<tbody>
<?php echo getChats(); ?>
</tbody>
</table>
PHP getChats()函数:
function getChats() {
global $PDO;
$stm = $PDO->prepare("SELECT * FROM `chats` ORDER BY `cid` DESC LIMIT 100");
$stm->execute();
while($Try = $stm->fetchAll()) {
foreach($Try as $Array) {
if(!isset($row_num)) $row_num = 1;
$row_class = (++$row_num % 2) ? '' : 'greyRow';
echo '<tr class="' . $row_class . '">';
echo '<td>' . $Array['uid'] . '</td>';
echo '<td>' . time_ago(date('Y-m-d H:i:s', $Array['time'])) . '</td>';
echo '<td>' . $Array['message'] . '</td>';
echo '</tr>';
}
}
}
答案 0 :(得分:3)
如果您允许用户将其输入存储为数据库 而不进行编码 中的聊天,则您的代码很容易受到XSS攻击。 因此,当你调用它来返回存储的内容时
<?php echo getChats(); ?>
字符串返回给客户端,可能包含恶意输入,此代码将执行它:
$('.chat').html(chats);