обработка нового поста в форуме

Discussion in 'PHP' started by Дикс, 7 May 2006.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    обработка нового поста в форуме


    достаточно ли пропускать пост через данную функцию чтобы обезопасить форум?
    PHP:
    function replaces($val)
    {
    if (
    $val == '') return('');

      
    $val htmlspecialchars($val);
      
    $val str_replace"\""'"'$val );
      
    $val str_replace"`"'"'$val );
      
    $val str_replace"'" '"'$val );
      
    $val preg_replace"/\\\$/"'$'$val );
      
    $val preg_replace"/\r/",, $val );
      
    $val stripslashes($val);
      
    $val preg_replace"/\\\/"'\', $val );
      $val = nl2br($val);
    return($val);
    }
    при условии что пока что там нет псевдо тегов и смайлов
     
  2. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    вот моя альтернатива:
    PHP:
    $val=str_replace("'""'"$val);
    $val=str_replace('"'"""$val);
    $val=str_replace(">"">"$val);
    $val=str_replace("<""&lt;"$val);
    $val=str_replace("`""&#96"$val);
    $val=str_replace("\\""\", $val);
    + nl2br() и этого будет достаточно. В твоем же примере абсолютно ненужным являются строчки
    PHP:
    $val str_replace"\""'&quot;'$val );
    $val str_replace"'" '&quot;'$val );
    $val stripslashes($val); 
    Первые две уже обрабатываеются при htmlspecialchars() с флагом ENT_QUOTES вроде. А stripslashes() вообще не нужен, коли ты преобразуешь все ковычки до этого.
    Непонятно зачем делаешь:
    PHP:
    $val preg_replace"/\r/",, $val ); 
    Вообще не понятно. \r и \n абсолютно никак не влияют на отображение html`а. Тем более что ты все равно потом делаешь nl2br().
    Не понял зачем нужна
    PHP:
    $val preg_replace"/\\\$/"'$'$val ); 
    Вообще не понял =)))

    Опять же, Дикс, твоя основная ошибка. Опять укажу на нее все тем же анекдотом:
    "Береженого бог бережет", - сказала монашка, надивая презерватив на свечку. Проще будь. Начни с того, что разберись, какие именно символы тебе нужно отфильтровать. И уже потом пиши код.

    И еще одно. Заменяя двойную, одинарную ковычку и перфекс на &quot;... Ну это короче не правильно. Если я пишу на форуме перфикс, значит я хочу чтобы именно перфикс стоял там, где я его поставлю. А не двойная ковычка, как у тебя. К пример я пишу
    , а твой форум выдаст мне
    . Не хорошо это
     
    _________________________
  3. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    ох, Тринукс. даже не знаю как всё объяснить чтоб меня поняли.
    имел я глупость поставить перед собой задачу - написать движок сайта да ещё и со внутренним форумом.
    ничего подобного раньше не писал, кроме простого форума и простого сайта в отдельности.
    да ещё и подпрягся сделать на этом движке сайт для своей тренажёрки, за два месяца бесплатных хождений туда (1100р. экономии)
    Вот и мечусь теперь из одного куска кода в другой.
    Пишу основу - главные функции, чтобы всё работало, а мелочи типа авторизации или фильтрации постов оставляю на потом. Но чтобы они всё равно уже были,
    как ты мог заметить я леплю туда что попало. Ты видел мою тему, где инфа о юзере пишется в куки и читается из них. Таким же образом я выдрал готовый код фильтрации из ExBB, но толком не разобравшись, лишь чуток его подрезал.
    Такие тонкости как флаги ENT_QUOTES я если и изучил при прочтении книги, то ещё не успел усвоить и научиться применять.

    Допишу основу и начну шлифовать код, тогда ваши советы мне очень и очень помогут.
    Большое спасибо, Тринукс, чтоб я без тебя делал =)
     
  4. Che-Guevara

    Che-Guevara Banned

    Joined:
    9 May 2006
    Messages:
    2
    Likes Received:
    3
    Reputations:
    -3
    2Trinux не злоупотребляй двойными кавычками :) кстати говоря в большенстве случаев достаточно фильтровать ' и < . Причем первый символ чтобы не было выхода за пределы атрибута value и предотвращения атаки типа sql-inj (есесино при передаче чисел intval() Дополнительно), а второй, чтобы не было возможности вставлять свои теги.
     
  5. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    2 Che-Guevara
    Ты не прав. А что если у меня атрибуты тега заключены не в одинарную ковычку, а в двойную? Значит нужно фильтровать обе. Далее. Перфикс. Как ты уже, надеюсь, знаешь (а знать ты это можешь, почитав инфу на главной странице antichat.ru) перфикс юзается в IE как символ начала\конца комментариев. А значит это реальная опасность вхождения в атрибуты тега. Значит нужно фильтровать и его. Далее, обратная треугольная скобка то е обязательна и то же при нефильтрующемся перфиксе дает несколько больше возможностей. Точнее те же, но в более простой форме. Обратный слеш... ну пишу я, к примеру
    а если не фильтровать его, то получу
    А это уже не хорошо.

    2 Дикс
    Перестань выкать =) не такой я уж и старый =)
     
    _________________________
  6. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    ещё забыл спросить это зачем?
    PHP:
    $val=str_replace("'""'"$val);
     
  7. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    :d я имел ввиду всех античатовцев :)
    кстати, вам сколько лет? :)

    ещё, извините ламера, что такое "перфикс"? или префикс?
     
  8. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Форум сожрал, там та же одинарная ковычка, тольво в десятичной кодировке.
    перфикс или префикс - сам ХЗ, но это - `
     
    _________________________
  9. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    ээ, а каг бы мне узнать десятичную кодировку кавычки?
    и ещё интерпретатор выдаёт ошибку на строчке
    PHP:
    $val=str_replace("\\""\", $val);
    где б мне узнать десятичный код бэкслеша?
     
  10. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    писец. писать движок с форумом, не зная основ пхп.

    Фтыкай http://us2.php.net/language.types.string до полного всасывания материала.
     
  11. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    2 Дикс
    в моем примере форум пожрал десятичную кодировку, поэтому и ошибка. Следуй совета nerezus`а
     
    _________________________
  12. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    я английский плохо знаю, плз, скажите этот десятичный код :)
     
  13. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    прочитай на русском. русская дока там тоже есть
     
  14. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    / тут все есть по этой теме
     
    _________________________
  15. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    :плачет:
    ребята, я не думаю что я настоко уж ламер, но пожалейте плз бедного технолога сборки топливной системы Су-34, который пашет круглые сутки в цехе окончательной сборки над шестой машиной Су-34, скажите плз эти коды, чтоб можно было уже поскорее закрыть этот вопрос, а потом уж я как-нить сам научусь (((
     
  16. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    2 Дикс
    За су-34 респект отдельный, коли не врешь.
    /crackchat/HTML/ внизу таблица
     
    _________________________
  17. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    пасиба
    про сушку не вру. НАПО им. Чкалова, цех окончательной сборки №9
    инженер-технолог

    ещё вопрос (не могу свою тему про обработку пароля найти)
    PHP:
    if (preg_match("/^([a-z0-9]{3,10})$/i""sdfsdfdsfdsfsd"))
    почему не пропускает?
     
  18. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    по размеру
     
  19. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    я читал мануал, там пишут
    где связь?