2015-07-11 3 views
-1

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

Однако, это может быть изменено из браузера пользователей, так же как их лучший способ проверки ввода пользователя?

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

BTW: Я использую Visual Studio C# ASP.NET

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

+0

Вы правы, считая, что все, что образуется на стороне клиента, является ненадежным. Даже такие вещи, как группы переключателей или флажки, которые нельзя изменить без редактирования dom. Да, выражение регулярного выражения может быть изменено. Вам нужна проверка как на стороне клиента (UX), так и на стороне сервера (фактическая безопасность). – jdphenix

+1

Основное правило: Никогда не доверяйте пользователю. Все, что вы размещаете в браузере, можно манипулировать любым, кто покидает ваш сервер. Таким образом, принятая практика заключается в том, чтобы проверять на стороне клиента только как механизм пользовательского опыта и выполнять проверку на стороне сервера как фактическую проверку. –

+0

Независимо от того, что вы делаете или не выполняете клиентскую сторону, вы должны * также * иметь строгие входные проверки на стороне сервера. Сервер - ваш последний - и лучший - защита от незаконных вводов. И да, практически все может быть изменено на стороне клиентов. В значительной степени то же самое относится и к полезной нагрузке URL и HTTP. Это не делает использование Javascript regex менее эффективным ...Trust Nothing;) – paulsm4

ответ

-3

Это правда, что характер клиентского кода заключается в том, что он является манипулируемым. Вы можете приблизиться к предотвращению изменения кода через консоль, используя Private и Privileged члены функции. Внутри конструктора привилегированные методы назначаются this и вызывают только частные переменные. Возьмем такой пример из crockford.com,

function Container(param) { 

    function dec() { 
     if (secret > 0) { 
      secret -= 1; 
      return true; 
     } else { 
      return false; 
     } 
    } 

    this.member = param; 
    var secret = 3; 
    var that = this; 

    this.service = function() { 
     return dec() ? that.member : null; 
    }; 
} 

Функция обслуживания является привилегироваяными и способен вызвать частный dec() метод, который имеет доступ к частной secret переменной. service - это привилегированный метод, потому что, если он вызван напрямую, он вернет null.service, а не желаемое значение переменной, к которой у него есть доступ, secret.

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

5

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

Проверка на стороне клиента может быть обойдена, и ее основной целью является пользовательский интерфейс. See here. Проверка на стороне сервера более сложна для обхода.

+0

Вы абсолютно правы. Кроме того, бесстыдный плагин для [OWASP Top 10] (https://www.owasp.org/index.php/Top_10_2013-Top_10) (* ОБЯЗАТЕЛЬНОЕ ЧТЕНИЕ *): https://www.owasp.org/index.php/Категория: OWASP_Top_Ten_Project – paulsm4

1

Никогда не зависеть от проверки на стороне клиента. Всегда должны быть двойные проверки, один на стороне клиента и один на стороне сервера. Java-скрипт, J-запрос и регулярное выражение могут сделать это для вас. В качестве побочного примечания, ИСПОЛЬЗУЙТЕ ПАРАМЕТРИЧЕСКИЕ ЗАПРОСЫ.

Смежные вопросы