как защитить скрипт ajaxRequest.open php

Я новичок в использовании 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); 

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

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

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

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

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

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

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

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

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

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

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

 if($_SERVER['PHP_SELF'] == $_SERVER['REQUEST_URI']) exit('This file can not be accessed directly...');