PHP - безопасный захват метода $ _GET - PullRequest
0 голосов
/ 10 апреля 2019

Я недавно начал изучать PHP и PDO.Долгосрочная цель состоит в том, чтобы иметь возможность динамически отображать содержимое на одной странице details.php из базы данных, используя метод $_GET для захвата ?page=id или какого-либо варианта.

InЧтобы сравнить ?page=id, мой план состоял в том, чтобы сохранить его в переменной ($pageId или что-то в этом роде) и сравнить эту переменную с записью в базе данных.Если запись существует, возьмите эту запись, но я немного зациклен на готовом бите оператора.

Когда я беру ?page=id с помощью метода get, я бы использовал подготовленный оператор, чтобы начатьзапрос, но нужно ли мне что-то делать для очистки содержимого, которое я регистрирую, перед обработкой запроса?

Ответы [ 3 ]

1 голос
/ 10 апреля 2019

При использовании подготовленного оператора PDO для привязки значений или переменных из пользовательского ввода не требуется для очистки входных данных (чтобы предотвратить внедрение SQL в запросы). Тем не менее, лучше ограничить его содержание, насколько это возможно.

Например, предположим, что ввод id будет целым числом, вы можете использовать:

$getId = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);

https://www.php.net/manual/en/function.filter-input.php

Теперь вы уверены, что это целое число.

Кроме того, вы можете ограничить его допустимым целым числом, например:

if (($getId > 0) && ($getId < PHP_INT_MAX)) {
   .... proceed ....
}

Другими словами, всегда максимально ограничивает пользовательский ввод .

0 голосов
/ 10 апреля 2019

См. Дезинфекция функций . Помните, что если вы сохраните какую-либо информацию, переданную пользователем, в журнал, а затем отобразите ее (т. Е. С помощью панели администрирования) в браузере, кто-то может передать вам вредоносный JavaScript-код, который будет выполнять ваш браузер. И если браузер вошел в административную панель, это может привести к проблеме безопасности.

Если вы задаете такие вопросы, я бы порекомендовал вам также OWASP , чтобы ознакомиться с другими угрозами безопасности.

Также Google разница между санитарией и санкционированием.

Некоторые функции фильтра, которые вы можете найти полезными: здесь , но не полагайтесь только на них. Например, допустимая функция фильтрации прохождения числа id может быть 1, 2, 3, но также 1e5, которая является действительной с точки зрения числа, но не для id в случае строки id обычно. Другое дело, что некоторые числа могут использовать . для разделения десятичной дроби, но другие используют ,, и оба действительны в зависимости от страны и финансовой интерпретации этих знаков. В некоторых округах . является разделителем тысяч, поэтому 1k = 1.000. Вот почему вы должны не передавать 100% функций фильтра, а рассматривать их как часть своих собственных функций.

0 голосов
/ 10 апреля 2019

Вы можете использовать функции php sanitize для очистки любых данных, которые идут с параметром GET.Например, ваше значение $ _GET равно 123, и вы хотите отфильтровать и очистить его.Используйте: $number = $_GET['number']; filter_var($number, FILTER_SANITIZE_NUMBER_INT);

или вы можете проверить, является ли значение, полученное из $ _GET, числом и> 0 с помощью:

$number = $_GET['number'];
if(is_int($number) && $number > 0) {
  //start to check with database.
}
...