Я делаю кнопку на своем сайте, которая при нажатии вызывает API с другого сайта, используя PHP. Я должен поместить свои данные для входа в систему в качестве переменных в моем PHP. Я видел некоторые эксплойты, когда хакеры могут получить значения переменных PHP, набрав что-то в адресной строке? Не уверен, что это XSS или SQL-инъекция или что-то еще, но я видел, где он будет печатать код PHP в формате XML.
Вот пример:
if (isset($_POST['submit'])) {
$time = time(true);
$prize = 200;
$ID = "my_secret_API_ID";
$Password = "my_secret_API_Password";
$APIcall = json_decode(file_get_contents("https://apiwebsite/developer/$ID/get_info&pw=$Password"), true);
$display = $APIcall ['some_info'];
echo $display;
}
Мои данные для входа безопасны? Должен ли я сделать их глобальными переменными вне $ _POST? Должен ли я определить их в отдельном файле PHP полностью, а затем использовать включение? Есть ли разница?
Я чувствую, что другой ответ на самом деле не отвечает на вопрос, который вы задали. Ответ Ohgodwhy относится к вашему $_POST
Переменные и плакат верен, что если вы не используете их, то вы не уязвимы (если только PHP или другой компонент, который вы использовали, был — маловероятно, хотя).
Я думаю, что ваш вопрос был конкретно связан с этой частью вашего кода?
$ID = "my_secret_API_ID";
$Password = "my_secret_API_Password";
Эти переменные должны быть безопасными, если нет Локальное включение файлов уязвимости (или аналогичные) на вашем сайте. Убедитесь, что любой другой выполняемый код не читает локальные файлы и отображает их, в противном случае злонамеренный пользователь может манипулировать ими для отображения ваших учетных данных. Можно хранить их в зашифрованной базе данных (всегда полезно разделять код и данные, где это возможно).
echo $display;
Этот бит кода может быть уязвимым, если https://apiwebsite/developer/$ID/get_info&pw=$Password
когда-либо возвращает некодированные данные, которые находятся вне вашего контроля. например если есть пользовательские данные в API и злой пользователь поставил некоторые <script>
код там, ваш сайт будет работать, если вы не кодируете через htmlentities. Это было бы XSS уязвимость. Ваш существующий код в порядке, хотя, если вы полностью доверяете apisite
правильно кодировать значения, которые находятся вне их контроля (и вы полностью доверяете apisite
сам).
На самом деле вы никогда ничего не делаете с данными, полученными из вашей формы. Нет никакой возможности быть уязвимым.
Isset возвращает только логические значения и, следовательно, не может манипулировать таким образом, чтобы представить любое ваше приложение.