|
|
|
|
|
для: Евгений Петров
(25.10.2008 в 01:08)
| | хм это, так может юзать mysql_escape_string, только если включены?.. | |
|
|
|
|
|
|
|
для: sl1p
(25.10.2008 в 00:12)
| | Стоп, брр.. )
<?php
function db_record_escape($s) {
$s = (get_magic_quotes_gpc()) ? stripslashes($s) : $s;
$s = mysql_escape_string($s);
return $s;
}
|
здесь возвращается со слешами потому что строка пропускается через mysql_escape_string. Или вы не это имели в виду? | |
|
|
|
|
|
|
|
для: Евгений Петров
(25.10.2008 в 00:10)
| | я очень извиняюсь, но не совсем понял...
тоесть если я буду не сразу в sql применять функцию а сначала переменную "обделаю", тогда стрип будет работать или как?) | |
|
|
|
|
|
|
|
для: sl1p
(24.10.2008 в 23:20)
| | Потому что вы не переприсваиваете значение переменной, вы подставляете результат работы этой ф-ии в запрос. | |
|
|
|
|
|
|
|
для: Евгений Петров
(24.10.2008 в 15:23)
| | Уважаю! | |
|
|
|
|
|
|
|
для: Евгений Петров
(24.10.2008 в 17:11)
| | ну это вроде понятно,но в функции ж db_record_escape есть код который удаляет слешы в случае включённых кавычек.. почему тогда выводит со слешами?... | |
|
|
|
|
|
|
|
для: sl1p
(24.10.2008 в 16:48)
| | Включенные кавычки это избытки прошлого, это сделали для безопасности а в итоге это стало жутко мешать.
В PHP5 помоему по умолчанию magic_quotes выключены. Поэтому я рекомендую работать с кодом так как будто magic_quotes выключены а вначале файла если они включены - убирать их. Это не путает при работе с данными.
> и когда они включены нужно добавить в html_escape()
не путайте, html_escape используется абсолютно для других целей. Данные в базе должны храниться как есть - т.е. БЕЗ кавычек и в виде обычного текста (т.е. например 5 > 3 а НЕ 5 > 3). Т.е. НЕ нужно перед занесением в базу данных пропускать их через htmlspecialchars. Это нужно только при выводе в браузер, чтобы он не воспринял текст как html-код.
Пример:
Допустим у нас есть строка:
символ '>' означает 'больше'
Эта строка приходит в скрипт через _POST.
Если magic_quotes = On то нам нужно сразу вырезать оттуда слеши, если Off - ничего не делаем и работаем дальше.
На данном этапе у нас есть строка БЕЗ кавычек, и нам в теперь дальнейшем все равно какое значение параметра magic_quotes.
Теперь нам нужно занести значение в базу. Мы ВСЕГДА пропускаем данные через mysql_escape_string.
В итоге в БД строка будет храниться в первоначальном виде, т.е.
символ '>' означает 'больше'
Теперь извлекаем из базы эту строку и выводим её. Но для того чтобы символ > не воспринялся как открывающая скобка тега пропускаем данные через htmlspecialchars и на выходе получим
символ '>' означает 'больше'
а браузер покажет
символ '>' означает 'больше' | |
|
|
|
|
|
|
|
для: Евгений Петров
(24.10.2008 в 16:44)
| | Чтобы ничего не переписывать создайте файлик с примерно следующим содержимым:
<?php
function stripdata(&$var)
{
if(is_array($var))
{
foreach ($var as $key => $value) {
stripdata($var[$key]);
}
} else {
$var = stripslashes($var);
}
}
if (get_magic_quotes_gpc())
{
stripdata($_GET);
stripdata($_POST);
stripdata($_COOKIE);
stripdata($HTTP_GET_VARS);
stripdata($HTTP_POST_VARS);
stripdata($HTTP_COOKIE_VARS);
}
|
И вызывайте его во всех файлах в самом начале работы (либо в каком нибудь общем файле, например config.php).
Будет примерно то же самое как если бы magic_quotes были выключены.
Все что вам остается это только изменить вашу ф-ю на
function db_record_escape($s) {
return mysql_escape_string($s);
}
|
| |
|
|
|
|
|
|
|
для: Евгений Петров
(24.10.2008 в 16:44)
| | я просто не могу понять смысл:
$s = (get_magic_quotes_gpc())? stripslashes($s):$s;
зачем тогда это нужно когда при включённых, нет слешей?... и зачем это использовать при записи в бд вообще:)
и когда они включены нужно добавить в html_escape()
$s = (get_magic_quotes_gpc())? stripslashes($s):$s;?
насколько я понял:)
но получается,если например я был на одном хостинге где кав. были включены, и там записывалось в бд. и вдруг перешёл туда где они отключены. Откуда мне тогда знать что слешы в записи это сама запись а не предотвращение?) | |
|
|
|
|
|
|
|
для: sl1p
(24.10.2008 в 16:36)
| | Во! Другое дело. Видите, мы поменяли всего одну настройку PHP а результаты выполнения разные. Это неправильно когда пользователь вводит какие то данные а они выводятся ему со слешами.
Поэтому лучше если есть такая возможность отключать magic_quotes, а если нету то пропускать входящие данные через stripslashes вручную и дальше работать с данными как если бы magic_quotes были выключены. | |
|
|
|
|