[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: [youtube] TAG
anonymouse
Всем привет - пробежал по форум-у нашел кое что.
Но вот еще и в нэте нашел и решил открыть тему.
Как таковым тут весь код - и делать ничего не надо,НО!
Я юзаю при вводе в БД HTMLSPECIALCHARS и конечно после этого я не делаю декоде.

У кого какие предложения - как обработать кусок текста так чтобы он выполнился ?


Это код до ввода в БД.
PHP
$text preg_replace('#\[youtube\]([\r\n]*)(http://www.youtube.com/watch\?v=)([^\s\'\";\+]*?)([\r\n]*)\[/youtube\]#si''<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/\3&hl=uk&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/\3&hl=uk&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>'$text);




Спустя 9 минут, 9 секунд (12.07.2009 - 12:41) twin написал(а):
Цитата
Я юзаю при вводе в БД HTMLSPECIALCHARS

а зря.

Спустя 29 минут, 21 секунда (12.07.2009 - 13:10) anonymouse написал(а):
twin
А что ты предложишь ? - addsleshes ?
Я когда-то что увидел то и юзаю.
Ведь он спец символы HTML-a переводит в текст ну и всякий там уже кавычки обрабатываю....


Какой вы порядок используете ? и почему ?

Спустя 37 минут, 47 секунд (12.07.2009 - 13:48) twin написал(а):
Я предложу решить эту задачку. Тогда сам поймёшь что где и как использовать.

Спустя 48 минут, 58 секунд (12.07.2009 - 14:37) FatCat написал(а):
Цитата (twin @ 12.07.2009 - 13:41)
Цитата
Я юзаю при вводе в БД HTMLSPECIALCHARS

а зря.

Не зря, если для фильтрации входящих.
А вот регулярку уже использовать на отфильтрованные данные.

Спустя 2 часа, 49 минут, 45 секунд (12.07.2009 - 17:26) twin написал(а):
Опять ты со своей параноей biggrin.gif
Я не могу понять, кто тебя так напугал, что ты переворачиваешь все с ног на голову. Вот давай по порядку разберемся.
1. Юзер заполняет форму. Данные отправляется на сервер. Они уже, в любом с лучае попадут в скрипт. В том виде, в котором их юзер написал.
2. Вот тут ты выставляешь кордон из htmlspecialchars и прочих преобразований. То есть в скрипте. Эти данные, хочешь ты или нет, все равно находятся в оперативной памяти.
3. Потом, успокоившись, что вроде как но пасаран, отправляешь их в базу. Увеличивая при этом её объём и затрудняя последующую с ней работу.

Теперь такой момент. Когда идет запрос, это тоже самое, как будто юзер посылает данные в скрипт. Только юзером теперь является MуSQL.
Ты со спокойной душой принимаешь их скриптом, надеясь на то, что все там в порядке.
А какая разница то? Если в базу попадет вредоносный код, не через твой кордон, а слева. Шелл кто нибудь закинет или тупо пароль троянчиком уведет, что тогда? Представь объём информации, который тебе предстоит перелопатить, дабы найти этого червя.
А так как ты выдаешь данные юзеру из базы в том виде, в котором они есть, то все мы становимся заложниками этой ситуации.

Охранять надо сам скрипт. И выдачу в первую очередь. От всех возможных посягательств, буде то данные из http либо от сервера баз данных.

Ты не просто усложнил себе жизнь, увеличив базу за счет разметки и обратных преобразований, но и никоем образом не улучшил этим безопасность.

Увеличение скорости выдачи за счет отсутствия фильтрации - очень слабый и подозрительный аргумент. Если это критичном в диапазоне, то есть куча других методов и механизмов, эфективных и безопасных, избежать накрутки трафика.

Но ни коем образом не хранить в базе венигрет из непонятно чего, что потом зачастую невозможно привести в божеский вид.

Весьма вероятно у тебя реализована дополнительная защита, но это же лишний головняк и усложнение. В сто раз проще использовать php при записи данных как трензитную структуру, просто переместить то что дал юзер в базу. А уже потом фильтровать и защищать исполняемые скрипты. Любыми методами. Тут все средства хороши. Боишься восклицательных знаков - да ради бога, можешь хоть вообще все символы заменить.

Я прошлый раз промолчал, но ты же советуешь это людям. Людям, которые крайне мало понимают в механизмах происходящего. По большому счету тем самым увеличивая количество потенциально уязвимых сайтов в сети.
Как страшно жить. smile.gif

Спустя 3 часа, 3 минуты, 4 секунды (12.07.2009 - 20:29) FatCat написал(а):
Цитата (twin @ 12.07.2009 - 18:26)
Юзер заполняет форму. Данные отправляется на сервер. Они уже, в любом с лучае попадут в скрипт.

HTML может представлять опасность лишь на стороне клиента.
И это широко используется: внедряется джаваскрипт, уводящий куки, и прочие штучки.

То есть, если пользователь ввел <script>, нам все равно нужно на экран отдать &lt;script&gt;

Тебя волнует, что при фильтрации на вводе в базу занесется не 8, а 14 байт?
Меня больше волнует, что на один ввод производятся тысячи выводов, а значит HTMLSPECIALCHARS будет выполняться тысячи раз вместо одного.
В прошлом движке этого форума все преобразования были на выводе, и в результате хостинг ложился наглухо уже 500 хитах в минуту
Сейчас преобразования на входе, и хостинг держит втрое больше без видимого торможения, я думаю, выдержит и вдесятеро больше.

А если уж нас начнет парить дисковое пространство, как это произошло с другим моим форумом, вопрос решился простой заменой функции сохранения/чтения:
Сейчас здесь
PHP
function extract_archived_post($pid$j_type)
    {
        
$arc_path = ($pid-$pid%1000)/1000;
        
$arc_path "../arc/".$arc_path."/";
        
$arc_file $pid%1000;
        
$arc_file ROOT_PATH.$arc_path.$arc_file.".".$j_type;
        if(
is_writeable$arc_file ))$archived_post file_get_contents$arc_file );
        else 
$archived_post "";
        
        return 
$archived_post;
    }
    
    function 
create_archived_post($pid$j_type$txt)
    {
        
$arc_path = ($pid-$pid%1000)/1000;
        
$arc_path "../arc/".$arc_path."/";
        
$arc_file $pid%1000;
        
$arc_file $arc_path.$arc_file.".".$j_type;
        if(
file_exists($arc_file))unlink($arc_file);
        if(
$txt != "")
        {
            if(!
file_exists($arc_path))mkdir($arc_path0777);
            
$fh fopen($arc_file"w");
            
fwrite($fh$txt);
            
fclose($fh);
        }
    }

То же с экономией места
PHP
function extract_archived_post($pid$j_type)
    {
        global 
$ibforums;
        
        
$arc_path = ($pid-$pid%1000)/1000;
        
$arc_path $ibforums->vars['base_dir']."arc/".$arc_path."/";
        
$arc_file $pid%1000;
        
$arc_file $arc_path.$arc_file.".".$j_type;
        if(
file_exists$arc_file.".gz" ))
        {
            @
ob_start();
            
readgzfile($arc_file.".gz");
            
$archived_post = @ob_get_contents();
            @
ob_end_clean();
        }
        elseif(
file_exists$arc_file ))
        {
            
$archived_post file_get_contents$arc_file );
        }
        else
        {
            
$archived_post "";
        }
        return 
$archived_post;
    }
    
    function 
create_archived_post($pid$j_type$txt)
    {
        global 
$ibforums;
        
        
$arc_path = ($pid-$pid%1000)/1000;
        
$arc_path $ibforums->vars['base_dir']."arc/".$arc_path."/";
        
$arc_file $pid%1000;
        
$arc_file $arc_path.$arc_file.".".$j_type;
        if(
file_exists($arc_file))unlink($arc_file);
        
$arc_file .= ".gz";
        if(
file_exists($arc_file))unlink($arc_file);
        if(
$txt != "")
        {
            if(!
file_exists($arc_path))mkdir($arc_path0777);
            
$fh gzopen($arc_file"wb5");
            
gzwrite($fh$txt);
            
gzclose($fh);
        }
    }

Спустя 18 минут, 15 секунд (12.07.2009 - 20:48) twin написал(а):
Цитата
То есть, если пользователь ввел <script>, нам все равно нужно на экран отдать &lt;script&gt;

Разумеется. Вводи вот тут все что хочешь, это хранится в базе в чистом виде. (Кстати кто то уже пытался biggrin.gif )
Я про другое. Если не юзер, а злой хакер, и не через твой скрипт, а иным хитрым способом засунет в базу <script>alert(666)</script>, то что по твоей схеме увидит юзер?
Всё остальное, приведенное как аргументы, не выдерживает никакой критики. Одно это перечеркнет все напрочь. А что касаемо
Цитата
что на один ввод производятся тысячи выводов,
, я же написал. Если это критично, пиши в файл. Фильтруй и пиши. Ты как я понял это и делаешь. База тут причем?

Спустя 57 минут, 15 секунд (12.07.2009 - 21:45) FatCat написал(а):
Цитата (twin @ 12.07.2009 - 21:48)
Если это критично, пиши в файл.

Ты предлагаешь дублировать информацию? В базу нефильтрованное для поиска, а фильтрованное в файлы для вывода?
Это хороший способ; с одним лишь недостатком по сравнению с моим: дискового пространства на хостинге будет жрать не вдвое, а как минимум вдесятеро больше. На шареде это не пойдет, дорого.

Спустя 26 минут, 58 секунд (12.07.2009 - 22:12) twin написал(а):
Вообще за безопасность надо платить. smile.gif
Я собственно ничего не предлагаю, тебе разумеется виднее. Просто советовать этого не стОит, не правильно это.
Ведь совсем недостаточно думать о том, как защититься от взлома. Нужно думать и о том, на сколько сложно будет восстановить систему после плачевного поползновения. Вот по твоей схеме, если не дай Бог что то случится и во все файлы попадет что то страшное (а хуже когда не во все, а выборочно, чтоб не сразу чухнули), то вернуть им первозданный вид будет весьма проблематично. Бэкапы тут не помогут, потому что ты можешь заметить последствия атаки месяца через два-три, когда все бэкапы будут полны этим дерьмом. А если есть чистый текст в базе, восстановить из бэкапа - раз плюнуть.
Мне кажется более приемлимым способ дублирования с архивацией устаревших дампов. Архивы можно эпизодически снимать с сервера и хранить дома. Это не так сильно ударит по дисковому пространству, но зато обезопасит данные.
А они стоят гораздо дороже, чем эконмия на трафике.

Спустя 2 часа, 33 минуты, 16 секунд (13.07.2009 - 00:45) anonymouse написал(а):
Ребят не знаю что у вас - но я в форум-е другой вопрос задал - но очень много полезного узнал но в тоже время решил что очень мало...

В смысле я так ни... и не понял blink.gif blink.gif blink.gif blink.gif blink.gif

Одно понял для себя что думаю есть смысл обрабатывать данные тока при выходе - ведь правда если чувак сможет закинуть через другую часть сайта код в БД в ту часть что не будет так экранировать - код воспроизводиться.

Тогда если я выше правильно понял смысол я вижу тока один.

ADDSLASHES
потом
STRIPSLASHES
и потом уже обрабатывать всякий там <script....> и т.д.
Хотя в чем может быть опасность кроме тэга <script> </SCRIPT> <?PHP ?>

Выполнение тэгов HTML-ea но и что тогда - на куждый текст делать неимоверный парсэр для спец символов кавычек и т.д. ? и все из за того что я хочу воспроизвестись все го то кусок кода лоя Ютуба ?



П.С. сегодня у нас праздник - или я не до пил - или не выпил достаточна !!!
П.С.2. Но с другой стороны для меня все что я написал выше ГЕМАРОЙ делать - 1 рас HTMLSPECIALCHARS потом можно делать декоде - и при этом в БД будет чистые данные !!!
С другой стороны я и не знаю что делать...
Вопрос - что мне делать с Ютубом то ? =)

Спустя 15 минут, 45 секунд (13.07.2009 - 01:01) PandoraBox2007 написал(а):
PHP
preg_replace('#<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/(.*?)"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/(.*?)" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>#i''[youtube]http://www.youtube.com/watch?v=//1[/youtube]');

Спустя 7 часов, 54 минуты, 54 секунды (13.07.2009 - 08:56) twin написал(а):
Цитата
Хотя в чем может быть опасность кроме тэга <script> </SCRIPT> <?PHP ?>

Выполнение тэгов HTML-ea но и что тогда - на куждый текст делать неимоверный парсэр для спец символов кавычек и т.д. ? и все из за того что я хочу воспроизвестись все го то кусок кода лоя Ютуба ?

Опасностей куча. Тот же безобидный на первый взгляд <img> допустим. Или ссылки.
Я не буду приводить рецептов.
Кто хочет разобраться - всегда рад помочь. Но для этого нужно желание именно разобраться, а не копипастить обрывки кода и лепить из них что попало.

Спустя 2 часа, 48 минут, 23 секунды (13.07.2009 - 11:44) FatCat написал(а):
Цитата (twin @ 12.07.2009 - 23:12)
если есть чистый текст в базе

Когда размер таблицы переваливает за сотни мегабайт, возникает такое количество разнообразных проблем, что трудности работы с файлами просто насморком покажутся.
Когда каждый вечер в праймтайм у тебя по 2000-5000 запросов страниц в минуту, и для генерации каждой страницы нужен запрос к БД с селектом из гигабайтной таблицы - никакая конфигурация сервера не спасет.
Если же еще на это сверху понакручены ресурсоемкие процедуры обработки выводимой информации - совсем туши свет.


Цитата (twin @ 12.07.2009 - 23:12)
Мне кажется более приемлимым способ дублирования с архивацией устаревших дампов. Архивы можно эпизодически снимать с сервера и хранить дома.

На тех ресурсах, где я хозяином, делается ежедневный бекап актуальных данных по крону с двухсуточной ротацией бекапов:
Мой скрипт ротации бекапов
Код
rm /home/user/backup/domain.sql.gz.2
mv -f /home/user/backup/domain.sql.gz /home/user/backup/domain.sql.gz.2
mysqldump -u root -h localhost -S /home/user/run/mysql.sock domain | gzip -c > /home/user/backup/domain.sql.gz
rm /home/user/backup/domain.arc.gz.2
mv -f /home/user/backup/domain.arc.gz /home/user/backup/domain.arc.gz.2
tar -czvf /home/user/backup/domain.arc.gz /home/user/domain.net/arc
rm /home/user/backup/domain.system.tar.gz.2
mv -f /home/user/backup/domain.system.tar.gz /home/user/backup/domain.system.tar.gz.2
tar -czvf /home/user/backup/domain.system.tar.gz /home/user/domain.net/index.php /home/user/domain.net/admin.php /home/user/domain.net/sources /home/user/domain.net/Skin

Бекапится вся актуальная информация: сам движок, база, файловый кеш в директории arc.
Как минимум раз в неделю бекап копируется на домашний компьютер.
Таким образом, у себя в локалке я могу стартануть форум по состоянию практически на любую дату за последние годы.


Цитата (twin @ 13.07.2009 - 09:56)
Тот же безобидный на первый взгляд <img> допустим. Или ссылки.

Я знаю только один безопасный тег: <NOSCRIPT>.
Все остальные теги можно инъецировать тем же джаваскриптом на любые эвенты.

Спустя 1 час, 52 минуты, 1 секунда (13.07.2009 - 13:36) twin написал(а):
Цитата
Когда каждый вечер в праймтайм у тебя по 2000-5000 запросов страниц в минуту, и для генерации каждой страницы нужен запрос к БД с селектом из гигабайтной таблицы

Зачем? Я не то имел ввиду. Ну сделано у тебя все грамотно, выдаешь ты инфу из файлов, зачем еще запросы... Модифицировать файлы в момент редактирования, только и всего. Да собственно не о твоем движке речь, я уверен что у тебя "все ходы записаны".
Речь о общем построении, как наиболее оптимально и безопасно делать приложения.
Вот человек читает этот наш спич и волосы дыбом у него. А ведь все в сто раз проще. Обработал данные перед занесением в бд штатными функциями для безопасного транзита и организовал выдачу по всем правилам безопасности. Какие гигобайты, ему с этим бы справится.

PS И еще.
Цитата
Таким образом, у себя в локалке я могу стартануть форум по состоянию практически на любую дату за последние годы.

Стартануть то ты можешь, вопросов нет. Н если вдруг как я писал, ты хватишься месяца через три, то эти три месяца, с самой актуальной и горячей инфой будет весьма не просто восстановить.

Спустя 1 час, 26 минут, 8 секунд (13.07.2009 - 15:02) FatCat написал(а):
Цитата (twin @ 13.07.2009 - 14:36)
Какие гигобайты, ему с этим бы справится.

Подозреваю, что такая же логика была у Мэта Мэхама, создателя нашего движка.
И когда количество сообщений в форуме приблизилось к 50 000 а вес таблицы сообщений к 100 Мб, мне пришлось переписывать пол-ядра движка. laugh.gif


Цитата (twin @ 13.07.2009 - 14:36)
Речь о общем построении, как наиболее оптимально и безопасно делать приложения.

Наиболее оптимально - это значит в соответствии с задачами приложения.
О безопасности лучше озаботиться на стадии приземления задницы на кресло перед компьютером для написания приложения, а не тогда, когда приложение уже написано и отлажено. rolleyes.gif

Спустя 54 минуты, 19 секунд (13.07.2009 - 15:57) twin написал(а):
Вот и я про то же. Если уж делать серьёзный движок, то нужно начинать с пректа. А когда перелатываешь то, что было сделано непродуманно и вылезают проблемы подобные твоим. С кучей места на сервере и сложными преобразованиями.

Я вот мало понимаю в сео, но мне почему то кажется, что сообщения двух-трехлетней давности мало влияют на индексацию и рейтинги. Но даже если и влияют, зачем держать их в общей куче, пусть бы хранились в файлах без возможности редактирования. Read only. А дамп рабочий можно держать на серваке за последние полгода к примеру. Или меньше даже. Остальной дома.

В крайнем случае возможен механизм возврата из архива по твоей же схеме обратных преобразований. Хотя по мне так лишнее это, тут частенько залетные хацкеры апают посты трехлетней давности с тайной надеждой сунуть какушку. Порядочных археологов практически нет.

Никакими гигабайтами там не пахнет, зато пахнет надежными и легко управляемыми бэкапами. Потому что всегда есть девственно чистый исходный материал, не изуродованный всякими эквивалентами и другими заменами.



Спустя 1 день, 21 час, 12 минут, 21 секунда (15.07.2009 - 13:09) anonymouse написал(а):
blink.gif blink.gif blink.gif

Спустя 23 минуты, 49 секунд (15.07.2009 - 13:33) twin написал(а):
Решай задачу, иначе ничего так и не поймешь.


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.