Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
php - проблема с кавычкой... |

11.05.2009, 11:54
|
|
Познающий
Регистрация: 14.01.2008
Сообщений: 38
Провел на форуме: 31731
Репутация:
-11
|
|
php - проблема с кавычкой...
Вобщем в базе есть запись с:
login='Мой логин'', pas=хеш паса
при прямом запросе из phpmyadmin'a:
SELECT * FROM users WHERE login='Мой логин'' AND pas_hesh='хеш паса...' всё выводиться нормально, а при выводе из php скрипта не выводиться...
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 исходнике запрос выглядит вот так:
Мой логин'
Зачем нужен "&", и почему он добавился?
Да, значение бирётся из кука:
%CC%EE%E9+%F2%E5%F5%ED%E8%F7%E5%F1%EA%E8%E9+%ED%E8 %EA%26%23039%3B
тут в глаза бросаются циферки 23039...
а если юзер вставит в текст #039 и с этим пройдёт запрос то ведь никакой уязвимости нет, этот символ, и другие с # интерпретируется только как текст? Зачем тогда функция защиты ставит & который интерпретируется браузером как & ?
А ещё когда то было описание sql уязвимости из за проблем с кодировкой, кажеться на разоре... У ково есть ссыль выложите плиз
если перез запрсоом символ & просто удалить с помощю регулярки то всё номрально, и безопасно?
Последний раз редактировалось Sharky; 11.05.2009 в 14:25..
Причина: сказал же нормально оформить
|
|
|

11.05.2009, 11:58
|
|
Познающий
Регистрация: 14.01.2008
Сообщений: 38
Провел на форуме: 31731
Репутация:
-11
|
|
Опана... Символ RE login='Мой логин'' ... Движок форума отобразил как ковычку!
|
|
|

11.05.2009, 12:31
|
|
Познавший АНТИЧАТ
Регистрация: 01.05.2006
Сообщений: 1,021
Провел на форуме: 3424739
Репутация:
921
|
|
оформи код как положено [php][*/php]
|
|
|

11.05.2009, 13:43
|
|
Banned
Регистрация: 14.01.2009
Сообщений: 515
Провел на форуме: 1996429
Репутация:
468
|
|
Замени $sql = mysql_query($query, $sqlid); на $sql = mysql_query($query, $sqlid) or die(mysql_error()); и увидишь , почему запрос не выполнился.
|
|
|

11.05.2009, 13:59
|
|
Участник форума
Регистрация: 11.12.2005
Сообщений: 160
Провел на форуме: 745130
Репутация:
159
|
|
$query="SELECT * FROM users WHERE login='Мой логин\'' AND pas_hesh='хеш паса...'";
вобщем разберись с кавычками
|
|
|

11.05.2009, 20:06
|
|
Познающий
Регистрация: 14.01.2008
Сообщений: 38
Провел на форуме: 31731
Репутация:
-11
|
|
Нет нет ребята... вы немного не так поняли...
Опана... Символ RE login='Мой логин'' ... Движок форума отобразил как ковычку!
Т.е запрос верный... а ковычка отобразилась здесь из за того что движок ЭТОГО форума интерпритировал этот спецсимвол... Запрос выполняется без ошибок!
Но через phpmyadmin резуьтат возвращается, а через пхп скрипт - нет!
Кажись уже понял)) Дело в том что скрипт сделал запрос с этим: &, а в пхп май админе этого небыло... Всё, с этим разобрался, работает!
Но теперь вопрос в том почему функция безопасности вставила этот символ: &
и безопасно ли его убрать?
А, помоему & добавляется перед функцией для указания того, что спецсимвол отображать не нужно...
Последний раз редактировалось ANONIM123; 11.05.2009 в 20:18..
|
|
|

11.05.2009, 22:56
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
нельзя сперва ставить одинарную ковычку а потом двойную: 'abc"
и аналогично: "abc'
надо однаково: 'abc' или "abc"
вот и твоя ошибка!
|
|
|

11.05.2009, 22:58
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
Вобщем в базе есть запись с:
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 "Есть резуьтат!";
}
^^
|
|
|

11.05.2009, 22:59
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
и почитай про:
htmlspecialchars
magic_quotes
|
|
|

13.05.2009, 12:38
|
|
Познающий
Регистрация: 14.01.2008
Сообщений: 38
Провел на форуме: 31731
Репутация:
-11
|
|
танкисты блин))
нельзя сперва ставить одинарную ковычку а потом двойную: 'abc"
и аналогично: "abc'
надо однаково: 'abc' или "abc"
вот и твоя ошибка!
Ну это же и обезьяне понятно, ещё раз повторюсь здесь проблема была в следующем:
' = "& # 039 ;" тока без пробелов, т.е этот движок, двиг античата отобразил спецсимвол не в виде его кода, а в виде орегинального символа, попробуйте написать сами:
"& # 039 ;" тока без пробелов
и увидите кавычку, также можно юзать другие символы, но < > не прокатывает. я даже написал скриптик:
PHP код:
<?
for($x=0; $x<99; $x++) {
echo "&�$x; - $x<br>";
}
?>
чтобы узнать коды всех символов..,)
Сейчас решил с помощю str_replase удалять эту фигню: "&"... И нормауль, рабоает =)
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|