Intereting Posts
Правильные заголовки для отправки и отправки электронных писем Загружать несколько изображений с помощью codeigniter i18n в Google App Engine – PHP PHP 5.4: отключить предупреждение «Создание объекта по умолчанию из пустого значения» laravel – не удается перенаправить множественную аутентификацию на разные страницы Как определить, какая кнопка отправки была нажата в форме Zend Framework? Поврежденный файл из файла заголовка PHP, возвращаемого из базы данных? Устаревшее: функция eregi () – это устаревшая контактная форма CakePHP 2.5.7 – Ошибка аутентификации при входе в систему с нестандартным пользователем Как создать веб-клиент электронной почты с помощью PHP? PHP + GD: imagecopymerge не сохраняет PNG-прозрачные пленки Создание многомерного вложенного массива из результата MySQL с повторяющимися значениями (PHP) Как я могу очистить содержимое веб-сайта на PHP с веб-сайта, для которого требуется вход в cookie? Сделайте форму в php, которая сохраняет информацию, которую пользователь дает, и подключает ее к другой печатной странице могу ли я передать аргументы моей функции через add_action?

Правильно ли я санируюсь / бегаю?

Я сделал простой поисковый скрипт в PHP, который ищет базу данных mySQL и выводит результат. Как это работает:

  • Пользователь ищет «гнездо» через форму поиска.
  • Мой PHP-скрипт GET этот поиск и оздоравливает его.
  • Затем скрипт, используя SELECT и LIKE , получает результаты.
  • Затем скрипт выводит результат пользователю.
  • Наконец, скрипт сообщает пользователю, что «jack-s возвратил x результатов». с помощью ускользания.

Я бы хотел спросить, правильно ли я это делаю?

Вот как я дезинфицируюсь перед SELECTING из базы данных:

 if(isset($_GET['q'])){ if(strlen(trim($_GET['q'])) >= 2){ $q = trim(mysql_real_escape_string(addcslashes($_GET['q'], '%_'))); $sql = "SELECT name, age, address FROM book WHERE name LIKE '%".$q."%'"; } } 

И вот как я убегаю, прежде чем выводить «результат возврата джека».:

 echo htmlspecialchars(stripslashes($q)) . " returned x results."; 

Это правильный способ сделать это?

Кстати, я знаю, что PDO и mySQLi предпочтительнее, поскольку они санируют себя с помощью подготовленных заявлений, но у меня нет никакого реального опыта с ними. Но я бы с радостью посмотрел, если вы, ребята, могли бы связать мне несколько учебников / объяснений новичков. Кроме того, я слышал, что magic_quotes и charset могут каким-то образом привести к инъекциям – это правильно?

    По какой-то причине нам также нужно избегать обратной косой черты .
    Итак, правильный код будет, я считаю

     if(isset($_GET['q'])){ $_GET['q'] = trim($_GET['q']); if(strlen($_GET['q']) >= 2){ $q = $_GET['q']; $q = '%'.addCslashes($q, '\%_').'%'; // now we have the value ready either for escaping or binding $q = mysql_real_escape_string($q); $sql = "SELECT name, age, address FROM book WHERE name LIKE '$q'"; //or $sql = "SELECT name, age, address FROM book WHERE name LIKE ?"; $stm = $pdo->prepare($sql); $stm->execute(array($q)); $data = $stm->fetchAll(); } } - if(isset($_GET['q'])){ $_GET['q'] = trim($_GET['q']); if(strlen($_GET['q']) >= 2){ $q = $_GET['q']; $q = '%'.addCslashes($q, '\%_').'%'; // now we have the value ready either for escaping or binding $q = mysql_real_escape_string($q); $sql = "SELECT name, age, address FROM book WHERE name LIKE '$q'"; //or $sql = "SELECT name, age, address FROM book WHERE name LIKE ?"; $stm = $pdo->prepare($sql); $stm->execute(array($q)); $data = $stm->fetchAll(); } } 

    Для вывода используйте

     echo htmlspecialchars($_GET['q']); 

    здесь не нужны полосы.

    Кроме того, я слышал, что magic_quotes и charset могут каким-то образом привести к инъекциям – это правильно?

    волшебные цитаты не повредят вашей безопасности, если вы их не будете использовать.
    charset опасен в случае некоторых чрезвычайно редких кодировок, но только если неправильно установлен. если для этой цели были использованы mysql(i)_set_charset или DSN (в случае PDO) – вы снова в безопасности.

    Что же касается PDO, то для начала можно использовать теги wiki , я считаю,