Как мне занести черные символы в строку utf-8? - PullRequest
0 голосов
/ 21 февраля 2011

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

Я хочу разрешить символы utf-8, чтобы люди могли вводить символыих родного языка, будь то китайский, шведский или любой другой.

Однако я хочу занести в черный список определенные символы, такие как <,>, [,],?, * и т. д., чтобы остановить любой потенциальный сценарийдетишки, пытающиеся использовать входные данные, чтобы сделать SQL-инъекцию или что-то подобное.

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

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

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

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

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Для начала вам нужно очистить входные данные как на стороне клиента, так и на стороне сервера. Любой, кто достаточно умен, чтобы создавать атаки, будет достаточно умен, чтобы отключить JavaScript достаточно долго, чтобы получать нужные данные в ваши формы.

Теперь, что касается регулярного выражения javascript для предотвращения вхождения - на SO много вопросов, которые говорят об этом.

// некоторые технические вещи

javascript regexp удалить все специальные символы

Защищает ли этот набор регулярных выражений ПОЛНОСТЬЮ защиту от межсайтовых скриптов?

// простой пример js для остановки ввода нежелательных символов.

http://www.sitepoint.com/forums/showthread.php?t=142118

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

0 голосов
/ 21 февраля 2011

Это действительно зависит от того, как вы делаете проверку в целом (мне нравится jQuery validate в качестве основы), но базовая проверка может выглядеть примерно так:

// set up a handler function
function checkBlacklist() {
    // check against a regex of bad chars
    // many ([]*? etc) may need to be escaped to work in regex
    if (/[\[\]<>\*\?]/.test(this.value)) {
        // take evasive action of some kind
    }
}
// assign it to your input
document.getElementById('mynameinput').onchange = checkBlacklist;

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

...