Как запретить посылать js в форме.

Zahar

Новичок
Как запретить посылать js в форме.

Я использую форму и разрешаю пользователю пользоваться любыми html тєгами но хочу запретить ему писать текст javascript.

Как мне проверять эту переменную на содержание скрипта?
strip_tags() удаляет все тэги даже html что мне не надо.
 

Vital_N

Новичок
Zahar
strip_tags удаляет не только все теги, вторым параметром можно указать разрешенные
 

kvf77

Red Devil
Vital_N

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

Andreika

"PHP for nubies" reader
даж если только <B> пропишет - не поможет же..

This function does not modify any attributes on the tags that you allow using allowable_tags, including the style and onmouseover attributes that a mischievous user may abuse when posting text that will be shown to other users.
 

kvf77

Red Devil
Andreika

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

Andreika

"PHP for nubies" reader
kvf77
не, ну я ж не автор темы.. но вот за регулярное выражение гарантированно защищающее html от скриптов скажу огромное спасибо )
 

Andreika

"PHP for nubies" reader
ок, давай не готовое.. подскажи плиз что проверять/вырезать то будем в этой хтмлке?
 

Ринат

Новичок
вырезать (заменить), используя ссылку в первом посте...все между (включая) <script type="text/javascript" language="JavaScript"> ...</script> ..а далее несложно (или наверное самое сложное), написать регулярное выражение
а там пусть пишет, не пишет, к тебе не попадет скрипт
или запретить уже на этапе ввода сообщения, но это js уже

в помощь
preg_replace
 

Andreika

"PHP for nubies" reader
<script>alert(1);</script> (нет language=".. ну да бог с ним)
<a href="#" onclick="alert(1)">1</a> - тож скрипт
 

2People

Новичок
Я бы удалял все сообщения в который есть "<(что_угодно)script".

Т.к. если есть тег script, то это полюбому не обычное пользовательское сообщение. (если только тематика не програмистская).
 

liss

Новичок
1) Выучить регэкспы.
2) Одним движением:
$page = preg_replace("/(<script.*>)(.+)<\/script>/isU", "", $page);
 

Фанат

oncle terrible
Команда форума
liss, ты хорошо подумал, прежде, чем писать?
где в задаче написано удалить все теги script?
 

t3[0one]

Новичок
ИМХО решения далеко не безопасны. Так как XSS встраивается и в style элементарно . Как сказал kvf77
регикс, Использовать BBCODE с хорошей оботкой вводимых данных упераясь например на это .. http://ha.ckers.org/xss.html
ИМХО
 

tolst

Новичок
вырезать:
<*script*>*<*/*script*>
onclick="*"
onsubmit
onmouseover
onmouseout
итп, все события....
но это имхо не выход... лазейку можна найти, например поставив одинарные кавычки... обработав и эти варианта, опять же можно найти лазейку, можно кавычек вообще не ставить... итд... BBCODE юзай...
 

t3[0one]

Новичок
Код:
<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41>

BBCODE
[color=red;width:expression(alert('XSS'));]sdds[/color]

Очень много возможностей внедрить xss и это
<*script*>*<*/*script*>
onclick="*"
onsubmit
onmouseover
onmouseout
детские игрушки !))

-~{}~ 12.10.05 01:47:

о че то мой пример перекодировался !)))
вобще в мнимоники HTML первый пример
 

Steamroller

Новичок
Видимо правильнее резать все, кроме разрешенных тегов, с помощью preg_replace_callback передавать каждый тег к себе в функцию, и там смотреть еще одним регулярным выражением - если он разрешенный, то заменять на его правильную версию (без всяких атрибутов и т.п.), если нет - то заменять на пустую строку.
 

kvf77

Red Devil
ну если есть такая насущная необходимость - можно сделать что-то типа мини интерпретатора - разбирать теги, скажем <a href="xxxx" onclick="">xxx2</a>, выкусывать отсюда xxxx и xxx2 и формировать новый тег <a></a> самостоятельно на основе выкушенного. а выкушенное легко проверяется - первое на соответствие стандартам URL, второе скажем на наличие только букв и цифр
 
Сверху