Безопасность IIS

       

Проверка клиентской части


IIS передает данные, отправленные веб-формой, сценариям для обработки, и первой возможностью проверки и фильтрации этих данных является веб-браузер пользователя. Эта проверка называется проверкой клиентской части. Она реализуется с помощью сценариев JavaScript, так как они могут выполняться и в Internet Explorer, и в Netscape. Эта проверка подтверждает, что данные, обрабатываемые сценарием, действительно введены в полях формы. В примере функция JavaScript проверяет ввод номера телефона в поле формы с именем Telephone:

function ValidateFormData(form) { var theNumber = form.Telephone.Value; var valid = true var GoodChars = "0123456789()-+ " var i = 0 if (theNumber =="") { // Возврат значения "ложь" при отсутствии номера телефона valid = false } for (i =0; I <= theNumber.length -1; i++) { if (GoodChars.indexOf(theNumber.charAt(i)) == -1) { alert(theNumber.charAt(i) + "является некорректным символом.") form.Telephone.focus(); valid = false } } return valid }

Данные, введенные в поле формы Telephone, проверяются перед отправкой на сервер посредством вызова функции ValidateFormData в методе onSubmit формы следующим образом:

<FORM ACTION="scripts/process.asp" METHOD="POST" onSubmit="return ValidateFormData(this);">

Следующий фильтр, написанный на JavaScript, является примером того, как следует удалять специальные символы:

function RemoveBadChars(strTemp) { strTemp = strTemp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); return strTemp; }

Еще одним способом контроля вводимых данных является указание предельного размера данных в полях ввода; это ограничение устанавливается добавлением атрибута MAXLENGTH в теги ввода текста. Например, если поле предназначено для ввода восьмизначного числа, следует ограничить вводимые пользователем данные:

<input type="text" name="ordernumber" MAXLENGTH="8">

Такая блокировка усложняет хакеру задачу по вводу вредоносного кода.
Тег <applet></applet> или <script></script> сам по себе занимает 17 символов.

Проверка клиентской части вводимых данных предотвращает их ненужную обработку, если пользователь допустил ошибку. Однако эта проверка не является столь же функциональной, как проверка серверной части. При использовании сценариев для получения вводимых данных <TEXT> из формы HTML их тип неизвестен, и некоторые символы, в обычной ситуации отбрасываемые фильтром, могут оказаться приемлемыми.

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

Элементы управления проверкой ASP.NET. Так как проверка вводимых пользователем данных очень важна с точки зрения безопасности, ASP.NET (последняя версия ASP от Microsoft для платформы .NET) обеспечивает серверные элементы управления, проверяющие вводимые пользователем данные и отображающие сообщения об ошибках при обнаружении некорректных данных. Элементы управления обычно выполняют проверку в коде сервера либо, при работе с веб-браузером, поддерживающим DHTML, – и на клиенте.

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

E-mail Address: <BR> <input id=txtEmail type=text size=35 MAXLENGTH=35 runat=server/>

<asp:RegularExpressionValidator ID=valEmailAddress ControlToValidate=txtEmail ValidationExpression=".*@.*\..*" ErrorMessage="Введен неправильный адрес электронной почты." Display=None EnableClientScript=true Runat=server/>

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


Содержание раздела