Стратегия параметризации для инъекции опасных символов


-2

У меня есть текстовое поле ввода для приема идентификатора электронной почты. Если идентификатор электронной почты не введен пользователем, У меня есть проверка на стороне клиента с использованием Java Script для отображения сообщения об ошибке, которое читает, как «Введите действительный идентификатор электронной почты». Код, как,

if(EmailIdIsNull) 
{ 
    error = "Please enter valid email id"; 
    //Submit this error message to the form 
} 

Этот способ обработки проверки уязвим для инъекций опасных персонажей. Для например., Один изменен «Пожалуйста, введите действительный идентификатор электронной почты» в «%[email protected]%3ECIMG+SRC%3D.html%22%3E»

Решение для этого было дано как,

"If available, use structured mechanisms that automatically enforce the separation 
between data and code. These mechanisms may be able to provide the relevant quoting, 
encoding and validation automatically, instead of relying on the developer to provide 
this capability at every point where output is generated" 

Ищет объяснение вышеприведенного решения. Кроме того, как можно применить выше решение в моем случае относительно проверки на стороне клиента идентификатора электронной почты?

  0

Возможно, это только я, но я понятия не имею, о чем вы спрашиваете. 09 авг. 132013-08-09 09:41:47

  0

@Svetlana Am ищет объяснение для «Если доступно, используйте структурированные механизмы, которые автоматически обеспечивают разделение ......», о котором я упомянул в своем вопросе. 09 авг. 132013-08-09 09:47:43

  0

Возможный источник цитаты: http: // cwe .mitre.org/data/definitions/116.html (@Svetlana) 09 авг. 132013-08-09 09:58:59

+1

Не могли бы вы объяснить, почему вы считаете, что ваш код уязвим для инъекционной атаки? Насколько я вижу, нигде нет данных пользователя. 09 авг. 132013-08-09 10:03:27

  0

Я думаю, что ваше сомнение должно быть объяснено лучше. В чем проблема с этим предложением? 09 авг. 132013-08-09 10:04:35

  0

@VikasV Нет, все еще плохой вопрос. Вы не правильно объясняете свою проблему. Чего вы боитесь?Вы говорите о том, что кто-то меняет «Пожалуйста, введите действительный идентификатор электронной почты» в какую-то другую строку, как они это сделают? и я не единственный, у кого есть трудное время, расшифровывающее ваш вопрос. 09 авг. 132013-08-09 10:09:56

  0

@Perseids +1 для вашего комментария. Я думаю, вы единственный, кто понял истинную проблему этого вопроса. 09 авг. 132013-08-09 10:29:13

  0

Не знаю, как мой код уязвим для инъекционной атаки. Для моего веб-сайта был проведен тест на проникновение из инструмента безопасности, который сообщил об этом. И было дано решение: «Если доступно, используйте структурированные механизмы, которые автоматически обеспечивают разделение ...» Я не могу понять, что это значит. Мы ищем объяснение этого утверждения. 09 авг. 132013-08-09 10:49:18

2

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

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

Я предполагаю, что адрес электронной почты будет записан в базу данных где-нибудь. В этом случае вместо динамического SQL используйте parameterized запросов. Это защитит вас от атак SQL-инъекций. Вы должны избегать данных при их выводе, чтобы предотвратить атаки XSS. Полезная ссылка здесь приведена в статьях XSS и SQL injection предупреждающих читсов из OWASP.

  0

можете ли вы любезно отредактировать свой ответ и дать объяснение «Если доступно, используйте структурированные механизмы, которые автоматически обеспечивают разделение .......», о котором я упомянул в своем вопросе .. 09 авг. 132013-08-09 09:48:42

+1

@VikasV Параметрированные запросы ** IS ** обеспечивает разделение кода от данных. Я предлагаю вам прочитать ссылки в своем ответе. 09 авг. 132013-08-09 09:49:38

  0

-1 Хотя сам вопрос плохо написан и недостаточно описывает проблему, ваш ответ не имеет никакого отношения к вопросу. Кроме того, это не то, что разделение кода с данными означает. 09 авг. 132013-08-09 09:53:30


1

Параметризированные запросы или prepared statements являются примером «механизмов, которые автоматически обеспечивают разделение между данными и кодом».

Проблема, когда нет separation between data and code, состоит в том, что данные, вводимые пользователем, могут быть введены в код и могут манипулировать приложением способами, которые не были продуманы программистом.

Для других механизмов, которые «обеспечивают соответствующее цитирование, кодирование и проверку автоматически», вы можете искать информацию о OWASP ESAPI или Java Spring Security Framework.

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