|
|
|
|
для: KVN
(23.05.2007 в 19:40)
|
| Если забыть на минуточку про безопасность, и говорить только о подстановке переменных в строки, то я всегда советую избавляться от массивов:
$user = $_POST['name'];
$query = "SELECT password FROM users WHERE name='$user'";
|
Такой код читается легче всего. И работает однозначно.
Можно подставлять и элементы массивов, но только индексируемые константами,
при этом константы эти пишутся без апострофов. Синтаксис идиотичен до безумия, и работает только с некоторыми строками:
$query = "SELECT password FROM users WHERE name='$_POST[name]'";
|
Можно также явно указывать область подстановки фигурными скобками:
$query = "SELECT password FROM users WHERE name='${_POST['name']}'";
|
Код читается не легче, вобщем-то.... Но более однозначен.
Можно вообще подстановку не применять, а цеплять строку из нескольких фрагментов через точки. Как написали Вы в своем посте. Такой код абсолютно однозначен, но из-за обилия операций сцепления строк выглядит тяжеловато.
Теперь почему Ваш код небезопасен. Потому, что посетитель может серьезно влиять на текст SQL-запроса, просто дописывая нужное в поле имени. Грубо говоря.
Атака называется SQL-injection . | |
|
|