2013-11-24 2 views
-2

Сегодня я заметил, что когда я иду на свой сайт, он показывает 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>'; 
       } 
      } 

} 
+3

Какой вопрос в точку? – jeroen

+0

Уязвимость отсутствует в размещенном коде, так как вы не отправляете какие-либо данные на сервер ... – Joren

+0

Что возвращает 'getChats'? Побег. Или лучше, не возвращайте весь HTML-код с AJAX - возвращайте только данные и используйте '.text' вместо' .html' –

ответ

3

Ваш код уязвим для XSS, если позволяют пользователям хранить свои материалы, как чаты в базе данных без кодирования. Так что, когда вы звоните, чтобы это вернуть то, что хранится, как это

<?php echo getChats(); ?> 

строка возвращается клиенту, который может содержать вредоносный программный ввод и этот код будет выполнять его:

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

Точно, в случае OP 'htmlspecialchars' будет делать трюк. – jeroen

+0

Спасибо, проработал. : 0 – user3026313

Смежные вопросы