Как защитить PHP-скрипт ajaxRequest.open - PullRequest
4 голосов
/ 10 октября 2010

Я новичок в использовании AJAX, и я просто следовал руководству, чтобы извлечь некоторую информацию из моей базы данных с помощью AJAX и вывести ее на страницу. Есть строка, где я вызываю php-скрипт, где выполняется запрос к базе данных, и результат выводится на экран. Я немного обеспокоен тем, что, поскольку имя файла видно на внешнем интерфейсе, и его единственная цель - вывод результатов базы данных напрямую, это может представлять проблему безопасности. Есть ли способ защитить этот файл и убедиться, что он запускает запрос только при вызове через скрипт ajax?

Вот фрагмент кода ajax, о котором идет речь (обратите внимание на строку «somefile.php»):

ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){
        var ajaxResponse = ajaxRequest.responseText;
        element.innerHTML = '<h2>' + ajaxResponse + '</h2>';
    }
}
ajaxRequest.open("GET", "somefile.php", true);
ajaxRequest.send(null);

Спасибо за любые ответы.

Ответы [ 5 ]

1 голос
/ 10 октября 2010

Поместите ваш PHP-код в эту проверку:

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
    {
    /* Your code here */
    }

У всех запросов ajax этот заголовок установлен. Как и все хизеры, этот тоже может быть подделан, поэтому, как всегда, не доверяйте ничему, поступающему от клиента, отфильтруйте / внесите в белый список параметры входящего запроса и позаботьтесь о своей базе данных, используя подготовленные операторы.

1 голос
/ 10 октября 2010

Нет, нет.Все, что вы доверяете клиентскому JavaScript, вы доверяете пользователю.

Если у вас есть аутентификация / авторизация, то вы доверяете пользователям, которых авторизуете.Если нет, то вы доверяете всем и их ботам.

0 голосов
/ 21 мая 2013

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

if($_SERVER['PHP_SELF'] == $_SERVER['REQUEST_URI'])
   exit('This file can not be accessed directly...');
0 голосов
/ 13 марта 2012

Я решил это следующим образом:

if($_SERVER['HTTP_REFERER'] == 'http://' . $_SERVER['SERVER_NAME'] . '/mydir/myscriptwithajaxcall.php')
  // do something
else
  echo 'Restricted Access';

Тогда сценарий php будет выполняться только после вызова ajax, если он поступает из определенного сценария (то же место).Примечание: я тестирую с сессиями и константами и не работал: /

0 голосов
/ 10 октября 2010

Вам нужно беспокоиться о сохранении xss в ajaxResponse. Вы можете избежать этого, выполнив htmlspeicalchars($var,ENT_QUOTES); для данных, прежде чем поместить их в базу данных или распечатать в своем ответе ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...