Ответить
в любом случае это не мешает сделать маленький тестовый файлик и потестить саму функцию. это стоит сделать хотя бы даже ради общего развития.
вот что-то типо этого
А это не повредит безопасности?
Заквотивание или фильтр или проверка допустимого в тексте
Отправлено: 10 Окт 2010#1
Вот столкнулся с проблемой, надо запрещать отправлять юзеру в форме отдельные символы и позволять иные.
Знаю, что это делает ф-ция preg()
Но вот не понял как она работает
Знаю, что это делает ф-ция preg()
Но вот не понял как она работает
Отправлено: 10 Окт 2010#2
самая лучшая для этого функция это preg_match(). К тому же она и самая быстрая. Но вот методы построения шаблонов или так называемые регулярные выражения, которые используются в этих функциях это краеугольный камень программистов. многие вю жизнь работают кодерами и не знают их и на половину)) Но лично мне они не показались сложными, я попробую объяснить как это работает. К стати более исчерпывающую информацию по ним чем в официальной доке ПХП вы не найдете. Я именно там их и учил.
например нам надо пропустить только какие то символы
квадратные скобки там не просто так они нужны.
символы ^ и $ обозначают начало и конец строки
символы # это просто правило регулярок. Заключайте их в кавычки и эти символы.
символ + после скобок означает что символов в строке может быть сколько угодно но не меньше одного (* - означает ноль и больше)
а сами квадратные скобки служат символьным класом точнее контейнером для него. все что между ними будет считаться разрешенными символами.
Обрати внимание что не все символы можно просто написать, некоторые имеют рабочее назначение и по этому их надо экранировать обратным слешом \.
иногда бывает быстрее перечислить что нельзя пропускать чем что можно. это можно сделать так
тут ^ внутри квадратных скобок играет роль отрицания. Другими словами - "пропустить все кроме того что прописано в этом блоке"
но это еще не все квотирование. что если пользователь напишет в посте HTML код и он так и выведется на страницу? страница может быть сьехавшей или вообще измененной. пользователь даже может внедрить скрипт. Это называется XSS - такой вид уязвимости.
что бы HTML код вывелся как простые символы надо перед выводом на экран квотить данные функцией
например нам надо пропустить только какие то символы
1
2
3
<?php if( preg_match('#^[тут просто пишем подряд все символы которые можно пропустить]+$#', $_POST['name'])) {
echo 'прошла';
}?>
квадратные скобки там не просто так они нужны.
символы ^ и $ обозначают начало и конец строки
символы # это просто правило регулярок. Заключайте их в кавычки и эти символы.
символ + после скобок означает что символов в строке может быть сколько угодно но не меньше одного (* - означает ноль и больше)
а сами квадратные скобки служат символьным класом точнее контейнером для него. все что между ними будет считаться разрешенными символами.
Обрати внимание что не все символы можно просто написать, некоторые имеют рабочее назначение и по этому их надо экранировать обратным слешом \.
иногда бывает быстрее перечислить что нельзя пропускать чем что можно. это можно сделать так
1
2
3
<?php if( preg_match('#^[^тут просто пишем подряд все символы которые нельзя пропустить]+$#', $_POST['name'])) {
echo 'прошла';
}?>
но это еще не все квотирование. что если пользователь напишет в посте HTML код и он так и выведется на страницу? страница может быть сьехавшей или вообще измененной. пользователь даже может внедрить скрипт. Это называется XSS - такой вид уязвимости.
что бы HTML код вывелся как простые символы надо перед выводом на экран квотить данные функцией
1
2
<?php htmlspecialchars($str);?>
Я горжусь тем, что создал . И люблю нашу команду)
Отправлено: 24 Окт 2010#3
В кодировке UTF8 не пропускаются русские символы, как исправить? "/ui" не заработал
Отправлено: 24 Окт 2010#4
ну странно, я как раз думал предложить модификатор "u". А можно тогда увидеть всю регулярку? Еще стоило бы проверить чтобы весь документ был в утф. Так как модификатор "u" лишь говорит о том что обрабатывать выражения надо в юникоде(utf) а если их отправка происходит не в утф могут происходить траблы.
Я горжусь тем, что создал . И люблю нашу команду)
Отправлено: 24 Окт 2010#5
все документы в UTF8. Дать код не могу ибо только во вторник получу его назад
Отправлено: 25 Окт 2010#6
skad0 пишет:
все документы в UTF8. Дать код не могу ибо только во вторник получу его назад
1
2
<?php $text = 'русскиебуквыблин';
if (preg_match('##', $text)) echo 'OK';?>
вот что-то типо этого
Я горжусь тем, что создал . И люблю нашу команду)
Отправлено: 29 Окт 2010#8
htmlspecialchars лиш гарантирует что HTML теги не будут работать в тексте а будут отображаться как есть. А прег матч служит для того чтобы не пропускать определенные символы. Если ты не хочешь чтобы юзеры тулили в заголовки какието определенные символы то htmlspecialchars тебе тут не поможет никак и нужно юзать прег чтобы их отловить а если тебе все равно что там будут за символы тогда прег не нужен.
Я горжусь тем, что создал . И люблю нашу команду)
Отправлено: 29 Окт 2010#9
Цитата
htmlspecialchars лиш гарантирует что HTML теги не будут работать в тексте а будут отображаться как есть. А прег матч служит для того чтобы не пропускать определенные символы. Если ты не хочешь чтобы юзеры тулили в заголовки какието определенные символы то htmlspecialchars тебе тут не поможет никак и нужно юзать прег чтобы их отловить а если тебе все равно что там будут за символы тогда прег не нужен.
А это не повредит безопасности?
Отправлено: 29 Окт 2010#10
нет. просто прогоняй все данные в которых не должен работать HTML перед выводом через htmlspecialchars. А те данные в которых должен работать HTML не должны содержать этого рабочего HTML от пользователей. А то они смогут и джаву вставить туда и все что угодно и это бцдет XSS то есть уязвимость. Для этого и придумали бб коды чтобы дать возможность людям размечать текс но при этом не юзать HTML. То есть они просто юзают заранее подобранный список команд таким образом не подвергая тебя опасности.
Я горжусь тем, что создал . И люблю нашу команду)
Зарегистрируйтесь или авторизуйтесь что бы писать
Сейчас online: 11. Зарегистрированных: 0. Гостей: 11.

