Замена специальных символов, таких как точки в JavaScript - PullRequest
0 голосов
/ 13 января 2012

У меня есть поисковый запрос от пользователя, и я хочу обработать его перед применением в браузере.так как я использую SEO с htaccess и URL-адрес поиска выглядит следующим образом: / search / [запрос пользователя] я должен сделать что-то, чтобы пользователь не делал непослушных вещей .. :) Как поиск ../include/conf.php, который будетрезультат в выдаче моего файла конфигурации.Я хочу обработать запрос, например, удалить пробелы, удалить точки (которые могут вызвать проблемы), запятые и т. Д.

var q = document.getElementById('q').value;
var q = q.replace(/ /gi,"+");
var q = q.replace(/../gi,"");
document.location='search/'+q;

первая замена работает просто отлично, а вторая мешает моему запросу ... любое решениебезопасно заменить эти рискованные символы?

Ответы [ 3 ]

2 голосов
/ 13 января 2012

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

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

2 голосов
/ 13 января 2012

Так что, если я отключу JavaScript или использую curl, я все еще могу сделать " шалости "? На клиентской стороне сделать здравомыслие, спасаясь с:

encodeURIComponent(document.getElementById('q').value)

и оставьте проверки безопасности на сервере. Вы будете удивлены тем, что может сделать злонамеренный пользователь (используя простейшие примеры вместо escape-последовательности .).

0 голосов
/ 13 января 2012

Точки в регулярных выражениях соответствуют чему угодно. Вы должны избежать их с обратной косой чертой ('\'):

var q = q.replace(/\.\./gi,"");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...