
06.05.2009, 18:24
|
|
AMA - Level 2
Регистрация: 10.06.2006
Сообщений: 1,113
Провел на форуме: 17668503
Репутация:
5826
|
|
Сообщение от Psi.X
Логин приходит в базу через $tp -> toDB() но НЕ ФИЛЬТРУЕТСЯ !
Можно дописать после нее echo $authname, и мы увидим резалт.
Ну как же не фильтруется, когда напротив очень даже фильтруется.
Смотрим e107_handlers/e_parse_class.php
Дабы избежать того, на что наткнулся ты, я поставлю /*1*/ в те участки кода, которые браузер воспринимает не так как они есть на самом деле:
Код:
function toDB($data, $nostrip = false, $no_encode = false, $mod = false)
{
global $pref;
if (is_array($data)) {
// recursively run toDB (for arrays)
foreach ($data as $key => $var) {
$ret[$key] = $this -> toDB($var, $nostrip, $no_encode, $mod);
}
} else {
if (MAGIC_QUOTES_GPC == TRUE && $nostrip == false) {
$data = stripslashes($data);
}
if(isset($pref['post_html']) && check_class($pref['post_html']))
{
$no_encode = TRUE;
}
if ($no_encode === TRUE && $mod != 'no_html')
{
$search = array('$', '"', "'", '\\', '<?');
$replace = array('&#/*1*/036;','&q/*1*/uot;','&#/*1*/039;', '�/*1*/92;', '&/*1*/lt;?');
$ret = str_replace($search, $replace, $data);
} else {
$data = htmlspecialchars($data, ENT_QUOTES, CHARSET);
$data = str_replace('\\', '\', $data);
$ret = preg_replace("/&#(\d*?);/", "&#\\1;", $data);
}
//If user is not allowed to use [php] change to entities
if(!check_class($pref['php_bbcode']))
{
$ret = preg_replace("#\[(php)#i", "[\\1", $ret);
}
}
return $ret;
}
Если чуть короче, то вот замена, которая нам нужна:
' -> &# /*1*/039;
Что делает браузер? отображает &# /*1*/039; как привычную кавычку.
Что делаешь ты? дописываешь в код echo($authname);
И видишь, то, что хочешь увидеть - кавычку, а вот если заглянуть в сорец странички (html (Вид - Исходный код страницы)), то можно увидеть что кавычки там нету, а есть &# /*1*/039;
|
|
|