ARCHANG3L
@ARCHANG3L
Немного программист

Какие фильтрации входящих данных вы производите?

Не первый год уже занимаюсь веб разработкой и для логина разрешаю только буквы, цифры и пробелы, а пароль не лимитирую и не фильтрую.

Какими способами вы пользуетесь для защиты от SQL инъекций в:
логин
пароль
заголовок статьи (он ведь без html, strip_tags и addslashes достаточно?)
содержание статьи (только addslashes?)

Во время проверки загруженного файла (картинка ли он) достаточно проверить его размеры(ширину к примеру)?

Большое спасибо.
  • Вопрос задан
  • 2960 просмотров
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
ограничивать пользователей в том, какие символы они хотят использовать это глупость.

Проблема sql иньекций в контексте php решается использованием pdo + prepared statements.
Проблема XSS решается эскейпингом (htmlentities). Проще взять на вооружения шаблонизаторы вроде twig-а, которые по умолчанию все выводящиеся данные эскейпят.

Вообще думаю вам стоит взять какой-нибудь популярный фреймворк (doctrine2, silex и т.д.) и не париться по поводу большей части этих проблем.
Ответ написан
Комментировать
akashtrih
@akashtrih
При добавлении данных в бд, для предотвращения SQL-инъекции, все данные пропускаем через mysql_real_escape_string:
function sanitize($string) {
    return "'" . mysql_real_escape_string($string) . "'";
}
$query = sql_sprintf(
     "SELECT * FROM users WHERE user=%s AND mail=%s", 
     sanitize($_POST['login']), 
     sanitize($_POST['mail'])
);


Для предотвращения XSS, в артибутах используем htmlentities(), в остальных местах htmlspecialchars():
<div data-attr="<?= htmlentities($var)?>"><?= htmlspecialchars($var)?></div>


Но, как уже сказал @Fesor, для работы с базой данных нужно использовать PDO или DBAL, но не функции mysql_*, которые не рекомендуется использовать (даже специальные красные предупреждающие плашки на страницах документации есть).

Для проверки загруженной картинки используй функцию getimagesize().
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы