Защита себя от межсайтовых скриптов - PullRequest
5 голосов
/ 02 декабря 2011

Я реализовал Request.QueryString["somestr"].ToString();

Я подавляю межсайтовый скриптинг, выполняя HttpUtility.HtmlEncode(Request.QueryString["somestr"].ToString();

У меня все еще есть проблема, из-за которой пользователь может сделать:

myfriendlydomain.com /? somestr = '; alert (WOO XSS SUCCEDED); test ='

Как я могу предотвратить это?

По запросу:

//Code Behind
if(request.querystring["somestr"] != null)
{
  AffiliatesEmail = HttpUtility.HtmlEncode(Request.QueryString["somestr"].ToString();    
}

//Front End
<script type="text/javascript">
  //<![CDATA[
    /*** Do not change ***/
    var SomeVAR = {};
    SomeVAR.Tracking.Sale.orderRef = '<%= AffiliatesEmail %>';
  //]]>
</script>

<script src="https://www.somethirdparty.com/somejscript.js" type="text/javascript" defer="defer"> </script>

Это наша реализация.Все, что я потом не считаю уместным.

Ответы [ 3 ]

2 голосов
/ 02 декабря 2011

Вы можете использовать метод JavaScriptStringEncode () для очистки строки и ее кодирования, чтобы предотвратить это.

Другой способ - использовать библиотеку AntiXSS .

1 голос
/ 02 декабря 2011

Зная контекст, в котором вы используете строку AffiliatesEmail, это помогает узнать, насколько тщательно вы должны проверять и дезинфицировать строку.

Скажем, например, что мы знаем, что AffiliatesEmail был действителен, только если он был числовым. Таким образом, вы будете защищены, если вы отклоните любой Request.QueryString["somestr"], который не подтвердится как число.

Теперь я подозреваю, что AffiliatesEmail на самом деле должен быть действительным адресом электронной почты.

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

using System.Net.Mail;
try
{       
    MailAddress ma = new MailAddress(AffiliatesEmail);
}
catch (FormatException fe)
{
    //Email isn't valid, so don't output it to the client!!!
}

Приведенный выше код просто проверяет, является ли строка адресом электронной почты (как определено в .NET) - если это не так, нам не нужно беспокоиться о том, что равно , потому что мы просто не доверяем этому.

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

0 голосов
/ 02 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...