
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
![]() |
۩
Дата
|
![]() Абориген ![]() ![]() ![]() ![]() ![]() Профиль Группа: Пользователь Сообщений: 247 Пользователь №: 42899 На форуме: Карма: 5 ![]() |
коротко из статьи phpfaq.ru (для MySQL):
1. Все строковые данные в запросе к БД в т.ч. и даты, должны быть в кавычках (одинарных или двойных, чаще бывает в одинарных). 2. Спецсимволы должны экранироваться обратным слэшем, например - (Маша по прозвищу \'Грей\'). Добавленные слэши в БД не добавляются, поэтому при выводе из базы stripslashes применять не нужно. 3. Числа так же можно прослэшивать как и строки или приводить к нужному типу, например - intval($id). 4. Имена полей и таблиц следует заключать в обратные кавычки, эта клавиша находится слева от клавиши "1". 5. Опция волшебные кавычки экранирует данные от пользователя еще до попадания их в скрипт, поэтому могут быть неожиданные результаты. Так же при использованию кодировки unicode "волшебные кавычки" могут принять часть кодировки (мультибайтной) за спецсимвол и заслэшить его, что приведет к некорректной обработке/отображении информации. Поэтому опцию "волшебные кавычки" отключают и делают прослэшивание вот так: $name = mysql_real_escape_string($name); если запрос с оператором LIKE, то $query = "SELECT * FROM `table_name` name LIKE Вместо $_GET['name'] вернее будет прописать $get_name, предварительно обрезав пробелы, если есть и ограничив длину при необходимости (ф. - trim, substr). Для структурной проверки информации используйте ф. - filter_var 6. Если в запросе есть динамически меняющиеся команды SQL или имена полей то все варианты подстановки необходимо прописывать отдельно, не вставлять их напрямую из запросов. Это от SQL инъекций. Это сообщение отредактировал sg.com - 30.03.2025 - 20:43 |
![]() Пользователь ![]() ![]() Профиль Группа: Пользователь Сообщений: 56 Пользователь №: 46417 На форуме: Карма: ![]() |
От инъекций PDO (https://www.php.net/manual/en/book.pdo.php) юзать надо.
|
![]() |
۩
Дата
|
![]() Абориген ![]() ![]() ![]() ![]() ![]() Профиль Группа: Пользователь Сообщений: 247 Пользователь №: 42899 На форуме: Карма: 5 ![]() |
о PDO начал читать, но в продолжение, из той же статьи:
как и в PDO, mysqli так же реализуют принцип "подготовки выражений" (prepared statements): SELECT * FROM table WHERE name=? Знак вопроса здесь - это маркер, он так же называется плейсхолдером (placeholder). Данные на его место подставляет специальная функция, которая "привязывает" переменную к запросу: $stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?"); // подготовка шаблона При этом запрос и данные идут в базу не вместе, а по отдельности, исключая возможность какой-либо ошибки или злонамеренной манипуляции. // это только пример (что наз. плейсхолдером) Это сообщение отредактировал sg.com - 8.04.2025 - 23:04 |
![]() |
۩
Дата
|
||
![]() Абориген ![]() ![]() ![]() ![]() ![]() Профиль Группа: Пользователь Сообщений: 247 Пользователь №: 42899 На форуме: Карма: 5 ![]() |
да и, собс-но, пример на PDO: if(ctype_digit($_POST['id']) && is_int($_POST['id'])) { да и пишут, что
|
||
![]() |
۩
Дата
|
||
![]() Абориген ![]() ![]() ![]() ![]() ![]() Профиль Группа: Пользователь Сообщений: 247 Пользователь №: 42899 На форуме: Карма: 5 ![]() |
добрался то одного момента, я было подумал что подготовленный запрос с помощью библиотек это уже готовое решение, а тут вот что:
// Динамическая часть SQL-запроса проверяется на соответствие ожидаемым значениям т.е. прописывать логику все равно нужно. ... да, тему не совсем точно назвал, нужно было - "небезопасные данные от пользователя" |
||
![]() |
![]() ![]() ![]() |