безопасные данные с переносом строк из textarea

не столько ответ, сколько вопрос - я правильно понял, что проверку по-хорошему лучше делать трижды?

- на стороне юзера (JS)
- на стороне сервера (php)
- на стороне БД (sql)
Или достаточно только пхп, дабы не перегружать "систему"?

На стороне юзера - зависит уже от вас, так как вам от этого ни тепло ни холодно, проверку на JS можно легко обойти.
На стороне сервера - само собой.
На стороне БД - этого я не понял, если сервер обработал данные, то по логике, он их должен отдать пригодными для вставки в БД. Или что вы имели в виду?
 
Имел ввиду соответствие полученных данных заданному типу данных БД.
 
Пользователь Dino скорее всего имел в виду не `, а '
да в частности ' ну а в целом все спецсимволы...ибо добрые хакеры такого могут наворотить, что мало не покажется....
 
Пользователь Dino скорее всего имел в виду не `, а '
Разницы нет какая кавычка, все пишется и выводится без проблем.
mysql_real_escape_string экранирует экранирует специальные символы, таким образом, что результат можно безопасно использовать в SQL-запросе в функции mysql_query().
 
Разницы нет какая кавычка, все пишется и выводится без проблем.
mysql_real_escape_string экранирует экранирует специальные символы, таким образом, что результат можно безопасно использовать в SQL-запросе в функции mysql_query().
Я не спорю, но речь шла о том, что
Одна кавычка ` в записываемых данных приведет в ошибке записи в БД
Ничего подобного. Все без проблем записывается и выводится.
И здесь не было ни слова про экранирование, так что пользователь dino прав. Если будет кавычка и ее не проэкранировать - будут проблемы. Вероятно вы просто не так друг друга поняли :)
 
Народ, чет у меня опять проблЭма...
записываю в базу:
PHP:
$data = mysql_real_escape_string(trim(strip_tags($_POST['data'],'<b>')));
в базе после этого появляется строка (если с переносами:( "первая строка \n вторая строка \n третья строка"

потом делаю выборку ячейки, в которую записалось содержимое переменной $data :
PHP:
$getUser = $sql->selectRow('SELECT * FROM ?_users WHERE email=?s', $_SESSION['userid']);
(использую библиотечную функцию selectRow( ) от dklab)
в результате в $getUser['data'] хранится выбранная из базы строчка: "первая строка \n вторая строка \n третья строка"

Нам нужно преобразовать для вывода символы \n в <br>

пишу так:
PHP:
<?=nl2br( $getUser['data'] )?>
и что вы думаете, строка вылазиет как есть: "первая строка \n вторая строка \n третья строка"

где БР-ки ?))

причем, если написать напрямую:
PHP:
<?=nl2br( "первая строка \n вторая строка \n третья строка"  )?>
, то все ок.
видать в базу записываются все же данные в виде: "первая строка \\n вторая строка \\n третья строка" (\n проэкранирован)
Только вот когда я в phpmyadmin смотрю ячейку. Там написана строка без экранов.
 
походу функция selectRow() уже делает mysql_real_escape_string фильтрацию. Получается двойная фильтрация данных.
 
Возможно magic_quotes_gpc включен в настройках. При использовании mysql_real_escape_string, magic_quotes_gpc должен быть отключен иначе получается двойное экранирование.
 
гм... а $getUser['data'] это не массив часом? Типа: $getUser['data'][0], $getUser['data'][1].... $getUser['data'][n],
 
Помоему для защиты от XSS атак используется вставка в скрытый инпут какого-нибудь токена, а потом проверка этого токена.
 
Назад
Сверху