2012-02-14 3 views
0

Я хочу разрешить пользователям выполнять поиск без ограничения какого-либо персонажа, что так всегда.PHP/Kohana: Защита поискового запроса

Достаточно ли «добавить косые черты» и / или mysql_escape_chars, чтобы защитить БД от атак?

Что еще вы предложите?

спасибо.

P.s. Маршрутизация URI ->www.example.com/search/category/query, где query - это термин для поиска.

ответ

0

Да, такая защита достаточно хороша (почти то же самое, если бы вы вставляли данные из текстового поля, то есть.), Но вместо этого я бы использовал mysql_real_escape_string. И не забудьте добавить «S вокруг строки поиска в вашем MySQL Query (... WHERE somecolumn LIKE 'query' вместо ... WHERE somecolumn LIKE query, то же самое для FULLTEXT поиска)

И, пожалуйста, убедитесь, что url_encode или base64_encode запрос в параметре URL запроса

+0

Благодарим вас за этот быстрый и проницательный ответ. – Phil

+1

вы очень приветствуете :) еще одно дополнение: если вы не хотите, чтобы ваши пользователи могли сохранять поисковый запрос url, используя запрос POST (это сделает ваш url более чистым и сделает Google немного счастливее ;)) – giorgio

+0

Еще раз спасибо. Но я думаю, что мне нужен запрос на получение, потому что это частная база знаний, над которой я работаю. Но почему это сделает Google счастливее? Кроме того, вы имеете в виду, что когда кто-то выполняет запрос, я буду переформатировать URL-адрес страницы результатов с url_encode? Не могли бы вы пояснить, пожалуйста? Спасибо. – Phil

2

Рекомендованное решение, если передавать запросы прямо, заключается в использовании mysql_real_escape_string по параметрам - хотя для этого требуется сначала открыть соединение с базой данных. Это важно, чтобы избежать экранирования среднего символа, используя определенные кодировки, принимая во внимание характер кодирования базы данных при выходе. Кроме того, mysql_escape_string устарел.

Однако, если возможно, рекомендуется использовать функцию prepared statements библиотеки mysqli; это позволяет вам передавать параметры запроса в качестве аргументов в PHP-методы, поэтому почти гарантирует, вы не будете испортить, удалив необходимость выполнить экранирование.

Предполагая, что вы используете встроенные инструменты базы данных Kohana, вы также можете использовать its prepared statement support or query builder, который также поддерживает подготовленные запросы и не требует экранирования.

-2

вопрос не имеет большого значения для меня.

  1. Почему поиск только для вас? Параметры динамического SQL-запроса являются краеугольным камнем каждого нашего приложения. Должно быть правило общего назначения (или набор правил), охватывающее каждый отдельный случай динамического SQL, а не только один.

  2. У Kohana есть свои собственные инструменты для работы с SQL. Зачем использовать исходные «add slashes»/mysql_escape_chars?

  3. www.example.com/search/category/query потребует ненужной перенаправления. Почему бы не использовать обычный /search?cat=category&q=query? Google, похоже, не считает, что стыдно использовать такие URL-адреса для поиска - зачем вам?

+0

-1 Ваш ответ не имеет большого значения для меня. – alex

2

Использование Kohana ORM/Query Builder - они будут защищать вас от инъекции SQL. Единственный случай, когда вам нужно следить, - это когда вы используете DB::expr, который не избегает ваших переменных. Читайте больше в official docs.

Смежные вопросы