Я сделал простой поисковый скрипт в PHP, который ищет базу данных mySQL и выводит результат. Как это работает:Правильно ли я санируюсь/бегаю?
- Пользователь ищет «домкрат» через форму поиска.
- Мой PHP-скрипт
GET
Этот поиск и дезинфицирует его. - Затем сценарий, используя
SELECT
иLIKE
, получает результаты. - После этого сценарий выводит результат пользователю.
- И, наконец, скрипт сообщает пользователю, что «результат возвращен 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
могут так или иначе привести к инъекциям - это правильно?
Вашего маскирования применяется точно в неправильном порядке. Может быть, объясните, как вы думали, что это сработает. – mario
@mario Это? Я не знаю, какой порядок работает лучше/правильнее. Позвольте мне все равно объяснить. Когда скрипт 'GET', вход обрезается, и он проверяет, равен ли вход или длиннее 2 символа.Впоследствии он санирует, сначала добавляя косые черты к '%' и '_', чтобы предотвратить поиск по шаблону, затем он санирует вход с помощью' mysql_real_escape_string', и, наконец, он обрезает, если в начале или в конце есть пробел ввода. Независимо от того, что он дезинфицирует, в настоящее время проводится поиск в базе данных. Что касается ускользания - это работает, но я получил это из случайной темы. – AnonymousJ
Ну, сначала выполняется обрезка, затем m_r_e_s, затем addcslashes для LIKE glob. – mario