2013-04-03 2 views
-1

Я новичок в PHP, и я собираюсь закончить проект, однако мне нужно защитить мою базу данных от SQL-инъекций. Нужно ли снимать слэши в каждом запросе sql, который я делаю, или мне нужно сделать это только для SQL-запросов INSERT/UPDATE, а не для операторов SELECT? Или лучше всего делать это ради всего?PHP, SQL Injection и когда использовать его

Я НЕ ПРОСИМ, КАК ПРЕДОТВРАТИТЬ ИНТЕЛЛЕКТУАЛЬНЫЙ ИНСТИТУТ SQL, Я ПРОСИЛ, КОГДА ИСПОЛЬЗОВАТЬ ЭТО.

+3

stripslashes/addslashes являются эквивалентом PHP использования использованной сырой туалетной бумаги для очистки после урагана. Они дерьмовые, они бесполезны, и они дадут вам совершенно ложное чувство безопасности. Сторонники PHP должны были отказаться от этих функций, в то же время они устарели magic_quotes и остальную часть идиотизма на языке. –

+0

Я знаю, как предотвратить это, я спрашиваю, когда я должен его предотвратить? – Staleyr

+2

Когда вы должны носить ремень безопасности? **ВСЕГДА**. Если вы спрашиваете, когда это предотвратить, то вы действительно не понимаете проблему. –

ответ

1

Используйте PDO. Не «PDO или MySQLi», а PDO. Это единственный надежный драйвер (хотя и обеспечивает недостаточную защиту).

Если вы хотите полной защиты, используйте SafeMysql

Я НЕ ПРОШУ КАК ПРЕДОТВРАТИТЬ SQL Injection, я задаю КОГДА ИСПОЛЬЗОВАТЬ ЕГО.

Хороший вопрос.

  1. Вам не нужна никакая защита или предотвращение.
  2. Вы должны правильно отформатировать свои запросы. ВСЕГДА.
+0

Спасибо, что прочитали вопрос! ха-ха, и спасибо за ответ – Staleyr

4

strip_slashes() не то, что вы хотите. Вы должны использовать подготовленные/параметризованные запросы, которые отделяют данные от SQL, что делает его неотъемлемо безопасным от этой проблемы.

3

Используйте PDO или mysqli с подготовленными операторами.

3

Существует так много других способов инъекции с использованием SQL. Если вам нужен хороший пример, вот один: /* в одном поле, */ в другом. Все между ними будет прокомментировано MySQL4 и MySQL5 без параметризации.

Переключитесь на PDO/MySQLi и запросите истинную параметризацию из драйвера. Это заставит водителя сначала отправить запрос без данных, а данные в другой пакет, тем самым вызывая соответствие, а также решить многие из многих головных болей.

Если вы еще этого не сделали, попробуйте нажать эту ссылку: http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/.