jQuery $ .ajax()调用引入XSS

时间:2013-11-24 01:41:59

标签: javascript php jquery ajax xss

今天我注意到,当我访问我的网站时,它会显示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>';
                }
            }

}

1 个答案:

答案 0 :(得分:3)

如果您允许用户将其输入存储为数据库 而不进行编码 中的聊天,则您的代码很容易受到XSS攻击。 因此,当你调用它来返回存储的内容时

<?php echo getChats(); ?>

字符串返回给客户端,可能包含恶意输入,此代码将执行它:

$('.chat').html(chats);