Реклама:

Версия Microsoft ASP.NET 1.1 имеет уязвимое место (впоследствии зафиксированное), позволяющее не использовать настройки авторизации для подкаталогов, если пользователь ввел обратную косую черту (\) или закодированный символ косой черты (/). например, /app%5csecure/ default.aspx. Это лишь еше один пример того, как сложно получить имена ресурсов и правы кодирования даже в большом проекте с множеством тестеров.

Наиболее распространенный эффект от такого поведения заключается в возникновении так называемой проблемы Turkish I. Взгляните па следующую страницу, в которой определяется, что введенные пользователем данные не должны начинаться с сочетания букв FILE и двоеточия (:) - чтобы пользователь не смог ввести моникер file://.

<%Ф Page La'iguage= "Си" UlC'jlîure="auto" Cultuœ="auto" %>

<%@ Import Namespace="System.Threading" %>

<Ъ@ Import NamesDace="System.Globalization" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http ://www.«3.org/TR/xhtml1/DTD/xhtm]1-transitional.dtd">

<script 'unat="server">

orotected void _Ptn6o Click(oo]ect sender. Event Args e) (

if (i sFileU rî(_tx tResource.Text))

Response.WriteC No file resources allowed'"); else

Response.Wri1.e("OK! ");

)

protected bon'. :sFileU'i(Stnng oath)

{

return (String,Coopare{path, 0, "FILE:", 0, 5, true) == 0);

</aciipt>

<ntm] xnlns="http://www.w3.org/1999/xhtml">

<huad runat-"server">

<title>

Turklstil Demo

<%' Thread.CurrentThread.CurrentUICullure.ToStringO *> </mie> </heao>

<'0ody st yle=" f ont - f am i 1 y : Ar : a I *' > < Г о r in id-'ormV runat*"server"> <civ>

Resource: <br />

<asp:TexlBcx runat-"server" I0="_txtResourco" lext="fi io://c:\YouBe;cerBlockThis\payroll,txl"

Wldth="400px"/> <br />

<asp;Button runar="server" ID-"_btnGo" Text="0K" 0nClxck="_btnGo_Click" />

</div> </form> </body> </html>

Будет ли выполняться это сравнение строк? Все зависит от обстоятельств.

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

В этом примере входные данные преобразуются в символы верхнего регистра, а затем сравниваются с литералом FILE:. В турецком языке значением верхнего регистра для буквы i не является буква I, поэтому, если в браузере клиента задана культура Turkish, сравнение не будет успешным. В других же культурах сравнение будет успешным. Здесь приведен лишь один такой пример, однако их существует очень много.

В версии .NET Framework 2.0 добавлен новый метод сравнения строк StringCompa-rison. Если требуется точное строковое сравнение без учета культуры, всегда выбирайте член Ordinal или OrdinallgnoreCase. Код корректного сравнения выглядит так:


⇐ Предыдущая страница| |Следующая страница ⇒