Защита от инъекций

Пэлт

Здравствуйте!

От чего не может защитить эта функция?

PHP:
  1. function filter($m){  /* FILTER от sql инъекций!*/
  2.     if(!is_numeric($m)){
  3.         $m = htmlspecialchars($m);
  4.     } else {
  5.         $m = intval($m);
  6.         $m = abs($m);
  7.     }
  8.     return $m;
  9. }
 

MouseZver

не от чего

 

Пэлт

Можете посоветовать лучший вариант защиты от инъекций sql?

 

Asifar

Что ты используешь для обращения в базу? mysqli или pdo

 

BAbl_gun

Если не ошибаюсь то вопрос по защите от инъекций проработан в PDO в расширении php.

 

Drunkenmunky

Не ошибаетесь, но заблуждаетесь.
Вопрос проработан двумя способами: в подготовленных запросах и в экранировании опасных символов с учетом кодировки соединения.
Подготовленные запросы не требуют экранирования, так как сам запрос и данные для него в базу данных поступают раздельно. Поддерживаются они не только в PDO, но и в mysqli.

 

Asifar

Если вы используете mysqli юзайте

PHP:
  1. $login = $mysqli->real_escape_string($_POST[‘login’]);
  2. $query = $mysqli->query(«SELECT * FROM users WHERE login=’{$login}‘»)->fetch_assoc();

Или если используете pdo

PHP:
  1. $query = $pdo->preapre(‘SELECT * FROM users WHERE login=:login’);
  2. $query->execute([‘:login’ => $_POST[‘login’]]);
  3. $fetch = $query->fetch(PDO::FETCH_ASSOC);
 

mkramer

Ну intval я понимаю. abs — не понимаю. А если я захочу отрицательное число в базу положить? Низзя? По поводу текстовых данных. htmlspecialchars нужна для того, чтобы заменить некоторые символы, имеющие значение в HTML на сущности. Отсюда вопрос: кто исполняет HTML? Базе глубоко фиолетово, есть там HTML или нету. Поэтому эту функцию уместно использовать при выводе значений в браузер. А от чего уместно нам защититься — так это от тех символов, которые могут изменить смысл нашего SQL-запроса, и большей частью это кавычки, но не только. Посему да, или экранируем, или подготовленные запросы. и то и другое есть и в mysqli и в PDO. С подготовленными запросами из коробки удобнее работать в PDO

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *