Объясните смысл функции

RASAMAHA

Новичок
Объясните смысл функции

Как она работает я понимаю, вырезает данные символы, а вот зачем она? Встречается в punBB

PHP:
function forum_remove_bad_characters()
{
	global $bad_utf8_chars;

	$bad_utf8_chars = array("\0", "\xc2\xad", "\xcc\xb7", "\xcc\xb8", "\xe1\x85\x9F", "\xe1\x85\xA0", "\xe2\x80\x80", "\xe2\x80\x81", "\xe2\x80\x82", "\xe2\x80\x83", "\xe2\x80\x84", "\xe2\x80\x85", "\xe2\x80\x86", "\xe2\x80\x87", "\xe2\x80\x88", "\xe2\x80\x89", "\xe2\x80\x8a", "\xe2\x80\x8b", "\xe2\x80\x8e", "\xe2\x80\x8f", "\xe2\x80\xaa", "\xe2\x80\xab", "\xe2\x80\xac", "\xe2\x80\xad", "\xe2\x80\xae", "\xe2\x80\xaf", "\xe2\x81\x9f", "\xe3\x80\x80", "\xe3\x85\xa4", "\xef\xbb\xbf", "\xef\xbe\xa0", "\xef\xbf\xb9", "\xef\xbf\xba", "\xef\xbf\xbb", "\xE2\x80\x8D");

	function _forum_remove_bad_characters($array)
	{
		global $bad_utf8_chars;
		return is_array($array) ? array_map('_forum_remove_bad_characters', $array) : str_replace($bad_utf8_chars, '', $array);
	}

	$_GET = _forum_remove_bad_characters($_GET);
	$_POST = _forum_remove_bad_characters($_POST);
	$_COOKIE = _forum_remove_bad_characters($_COOKIE);
	$_REQUEST = _forum_remove_bad_characters($_REQUEST);
}
Спрашивал уже много где, наколпал несколько интересных вещей. Первое
И второе, попробуйте код:

PHP:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
var_dump("\xe2\x80\xae", "123456qwerty");
?>
 

fixxxer

К.О.
Партнер клуба
это видимо чтобы всякие шутники не повернули поток справа налево и пр.

но куки то за что?
 

korpus

злой бобёр
Это, наверное, для того, чтобы убрать из hml-кода всякие паразитные символы, вроде нулевого символа. Если это символ появиться в html-коде, то разметка может повести себя непредсказуемо.
Попробуй этот код:
Код:
<?php
var_dump("\xe2\x80\xae", "123456qwerty"); 
?>
А затем этот:
Код:
<?php
echo '<pre>';
var_dump("\xe2\x80\xae", "123456qwerty"); 
echo '</pre>';
?>
В некоторых браузерах результат будет отличаться из-за того, что какой-то паразитный символ на странице появился первым. Так что правильно делают, что избавляются от них.

-~{}~ 12.09.10 09:33:

Или по крайней мере там что-то такое происходит, что вся разметка портиться. Лучше у fixxxer спросить, он вроде понимает что здесь к чему
 

cDLEON

Онанист РНРСlub
http://www.utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=128&utf8=string-literal
 

ХакИрФсимагущий

[засикречино]
ну вы даете анти майскулиньекционный фильтр неузнали))) возможно и ксс ный
хотя не не макй скулный \xe2\x80\xb2 и \xe2\x80\xb3 нету(((


-~{}~ 13.09.10 22:46:

Пан бб пишет тоже самое что и корпус написал

-~{}~ 13.09.10 22:48:

полежная вешь наерное но никогда не стречался чтобы пользоатель вводил подобное
 

korpus

злой бобёр
Как я только что нарыл, некоторые символы убираются, чтобы не допускать spoofing attack.
Например, в описании этого символа "\xe1\x85\x9F" такое написано: http://www.fileformat.info/info/unicode/char/338/index.htm

И ещё ссылка про spoofing attack:
http://kb.mozillazine.org/Network.IDN.blacklist_chars
 

Фанат

oncle terrible
Команда форума
чтобы не допускать spoofing attack, надо убирать совсем по-другому. не допускать смешивания различных кодировок в одном и том же адресе. а разных символов с одинаковым написанием - миллион. замучаешься фильтровать.

Вообще этот код выглядит обычными поисками Неловимого Джо.

уж во всяком случае я бы не убивал эти символы, а выкидывал 500 ошибку.
 

korpus

злой бобёр
http://phpclub.ru/talk/showthread.php?s=&threadid=120737&rand=8
в соседней теме вурдалак написал, что кодировку строки определить невозможно (ну или проблематично будет). И в IDN смешение кодировок вполне возможно, так что это смешение надо допускать для удобства пользователей интернета.
Согласен, что против фишинга эти символы убирать бессмыслено из-за их большого количества.
 

fixxxer

К.О.
Партнер клуба
ээ... а на хера этим все суперглобалсы то прогонять тогда? (впрочем, я не знаю ни одной причины чем-то прогонять суперглобалсы, кроме как, разве что, ликвидации последствий неотключаемых на говнохостинге magic_quotes).
 

Вурдалак

Продвинутый новичок
korpus, вы тут не путаете кодировку и алфавит (письменность)? Кодировка-то одна — punycode.
 

fixxxer

К.О.
Партнер клуба
Автор оригинала: ХакИрФсимагущий
ну вы даете анти майскулиньекционный фильтр неузнали))) возможно и ксс ный
хотя не не макй скулный \xe2\x80\xb2 и \xe2\x80\xb3 нету(((
Чота я не понял, в каком случае это должно сработать.

$ php test.php utf8 utf8
test&#8242;123
test&#8243;1234
ok

$ php test.php utf8 cp1251
test?123
test?1234
ok

$ php test.php cp1251 utf8
test&#8242;123
test&#8243;1234
ok

$ cat test.php
PHP:
<?php
if ($_SERVER['argc'] < 2) exit("Bad args\n");
$client_encoding = $_SERVER['argv'][1];
$table_encoding  = $_SERVER['argv'][2];
ini_set("display_errors", true);
mysql_connect('localhost', 'root', '');
mysql_select_db('test');
mysql_set_charset($client_encoding);
$T = 'T'.crc32(microtime());
mysql_query("create table $T (s varchar(255)) charset=$table_encoding") or die(__LINE__.mysql_error());
mysql_query("insert into $T (s) values ('test\xe2\x80\xb2123')") or die(__LINE__.mysql_error());
mysql_query("insert into $T (s) values ('test\xe2\x80\xb31234')") or die(__LINE__.mysql_error());
$r = mysql_query("select s from $T") or die(__LINE__.mysql_error());
while ($result=mysql_fetch_assoc($r)) echo $result['s'],"\n";
mysql_query("drop table $T") or die(__LINE__.mysql_error());
echo "ok\n";
 

ХакИрФсимагущий

[засикречино]
Условия для подобной атаки надо еще создать)).

-~{}~ 09.10.10 21:56:

Хотя может я ошибся помоему эти символы не те что надо я их смотрел в таблице.
 

fixxxer

К.О.
Партнер клуба
Ну смысл я понял - юникод-символы, которые при перекодировке из клиентского юникода в серверную 8-битку приравняются к кавычкам. Но что-то сомневаюсь, не дураки же mysql писали (может в каких-то ранних реализациях 4.1 такая бага и была). Ну и с prepared statements это не прокатит по определению. Да даже если и работает где-то, такое еще и найти надо: мультибайтный client charset при однобайтном серверном - это шибко экзотика. Нормальным людям с utf-8 везде точно опасаться нечего =)

-~{}~ 09.10.10 22:46:

Касаемо фишинга, есть непробиваемая (ок, ок... не будем углубляться в вопрос p!=np и багов в openssl) защита - https. То, что по http, ценности обычно и не представляет (ну сопрут у меня пароль от этого форума, я сильно расстроюсь?)
 

fixxxer

К.О.
Партнер клуба
>> fixxxer, каким образом HTTPS поможет при борьбе с фишингом?

Во первых, клиентские сертификаты (не увидел окошка с запросом -- в лес, сразу ясно - наипут). Это в идеале, но так мало кто делает (увы).

Во вторых. Отсутствие большой зелененькой фигни в адресной строке сложно не заметить. :) Впрочем, при желании и "зелененькую" можно получить, но это слишком сильно с доками возиться, такой фишинг себя не окупит.
 

Вурдалак

Продвинутый новичок
fixxxer, вот-вот. Это всё для тех, кто вообще понимает что есть HTTPS. На фишинг ловяться-то как раз в основном неопытные пользователи.
 

ХакИрФсимагущий

[засикречино]
А фишинг с большой зеленой фигней?
(К примеру просроченый сегодня ссл сертификат вбить. Ну или еше ченить придумать, на то и фишинг, что от слова фишинг)
 

fixxxer

К.О.
Партнер клуба
Будет синяя фигня (в фф) или замочек без большой надписи (в хроме). Сразу заметно. (В ие вот хрен знает, я его уже сто лет не запускал кроме как для проверки верстки, и то в иетестере. )

Хотя те кто ведутся на такое, им наверное хоть "тут тебя наепут" напиши - не заметят :D
 
Сверху