PDA

Просмотр полной версии : php - проблема с кавычкой...


ANONIM123
11.05.2009, 11:54
Вобщем в базе есть запись с:
login='Мой логин'', pas=хеш паса

при прямом запросе из phpmyadmin'a:
SELECT * FROM users WHERE login='Мой логин'' AND pas_hesh='хеш паса...' всё выводиться нормально, а при выводе из php скрипта не выводиться...

$query="SELECT * FROM users WHERE login='Мой логин'' AND pas_hesh='хеш паса...'";
echo $query;
$sql = mysql_query($query, $sqlid);
while ($tablerows = mysql_fetch_row($sql)){
echo "Есть резуьтат!";
}

Почему не выодиться из пхп скрипта?


Добавлено через 5 минут:
Аа, в html исходнике запрос выглядит вот так:
Мой логин'

Зачем нужен "&amp", и почему он добавился?

Да, значение бирётся из кука:
%CC%EE%E9+%F2%E5%F5%ED%E8%F7%E5%F1%EA%E8%E9+%ED%E8 %EA%26%23039%3B
тут в глаза бросаются циферки 23039...

а если юзер вставит в текст #039 и с этим пройдёт запрос то ведь никакой уязвимости нет, этот символ, и другие с # интерпретируется только как текст? Зачем тогда функция защиты ставит &amp который интерпретируется браузером как & ?

А ещё когда то было описание sql уязвимости из за проблем с кодировкой, кажеться на разоре... У ково есть ссыль выложите плиз :)

если перез запрсоом символ &amp просто удалить с помощю регулярки то всё номрально, и безопасно?

ANONIM123
11.05.2009, 11:58
Опана... Символ RE login='Мой логин'' ... Движок форума отобразил как ковычку!

Sharky
11.05.2009, 12:31
оформи код как положено [php][*/php]

Krist_ALL
11.05.2009, 13:43
Замени $sql = mysql_query($query, $sqlid); на $sql = mysql_query($query, $sqlid) or die(mysql_error()); и увидишь , почему запрос не выполнился.

NuR
11.05.2009, 13:59
$query="SELECT * FROM users WHERE login='Мой логин\'' AND pas_hesh='хеш паса...'";

вобщем разберись с кавычками

ANONIM123
11.05.2009, 20:06
Нет нет ребята... вы немного не так поняли...
Опана... Символ RE login='Мой логин'' ... Движок форума отобразил как ковычку!
Т.е запрос верный... а ковычка отобразилась здесь из за того что движок ЭТОГО форума интерпритировал этот спецсимвол... Запрос выполняется без ошибок!
Но через phpmyadmin резуьтат возвращается, а через пхп скрипт - нет!

Кажись уже понял)) Дело в том что скрипт сделал запрос с этим: &amp, а в пхп май админе этого небыло... Всё, с этим разобрался, работает!

Но теперь вопрос в том почему функция безопасности вставила этот символ: &amp
и безопасно ли его убрать?
А, помоему &amp добавляется перед функцией для указания того, что спецсимвол отображать не нужно...

eLWAux
11.05.2009, 22:56
нельзя сперва ставить одинарную ковычку а потом двойную: 'abc"
и аналогично: "abc'
надо однаково: 'abc' или "abc"
вот и твоя ошибка!

eLWAux
11.05.2009, 22:58
Вобщем в базе есть запись с:
login='Мой логин', pas=хеш паса

при прямом запросе из phpmyadmin'a:
SELECT * FROM users WHERE login='Мой логин' AND pas_hesh='хеш паса...' всё выводиться нормально, а при выводе из php скрипта не выводиться...

$query="SELECT * FROM users WHERE login='Мой логин' AND pas_hesh='хеш паса...'";
echo $query;
$sql = mysql_query($query, $sqlid);
while ($tablerows = mysql_fetch_row($sql)){
echo "Есть резуьтат!";
}


^^

eLWAux
11.05.2009, 22:59
и почитай про:
htmlspecialchars
magic_quotes

ANONIM123
13.05.2009, 12:38
танкисты блин))

нельзя сперва ставить одинарную ковычку а потом двойную: 'abc"
и аналогично: "abc'
надо однаково: 'abc' или "abc"
вот и твоя ошибка!Ну это же и обезьяне понятно, ещё раз повторюсь здесь проблема была в следующем:

' = "& # 039 ;" тока без пробелов, т.е этот движок, двиг античата отобразил спецсимвол не в виде его кода, а в виде орегинального символа, попробуйте написать сами:
"& # 039 ;" тока без пробелов и увидите кавычку, также можно юзать другие символы, но < > не прокатывает. я даже написал скриптик:

<?

for($x=0; $x<99; $x++) {
echo "&amp�$x; - $x<br>";
}

?>
чтобы узнать коды всех символов..,)

Сейчас решил с помощю str_replase удалять эту фигню: "&amp"... И нормауль, рабоает =)