2016-06-16 4 views
1

Моя служба безопасности сообщила одна HTML инъекционный тег проблемы безопасности для кода нижеHTML инъекции тег в asp.net

function ClosePopUp(objBhID) { 
     var pageName = window.location.pathname; 
     var modalPopupBehavior = $find(objBhID); 
     if (modalPopupBehavior != null && modalPopupBehavior != 'undefined') { 
      modalPopupBehavior.hide(); 
     } 
     if (objBhID == 'bhThankMsg' && pageName == '/Projects/Comm.aspx') { 
      var objPartnerID = '<%=Request.QueryString["partnerid"]%>'; 
      if (objPartnerID != 'undefined' && objPartnerID != null && objPartnerID != '') { 
       window.location = '/Projects/Comm.aspx?Id=<%=Request.QueryString["ID"]%>&partnerid=<%=Request.QueryString["partnerid"]%>';     
      } 
      else { 
       window.location = '/Projects/Comm.aspx?Id=<%=Request.QueryString["ID"]%>'; 
      } 
     } 
    } 

Моя служба безопасности сообщила ниже вопрос enter image description here

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

Мое требование: я не хочу, чтобы любой пользователь или хакер вводил ненужные данные, как этого добиться?

+1

... и в чем собственно вопрос?!? – ViRuSTriNiTy

+1

Необходимо указать, в чем проблема. Вы спрашиваете, как безопасно фильтровать входные данные пользователя или что? Я не вижу вопросительного знака где-либо в вашем «вопросе», –

ответ

0

Хотя другой ответ будет работать в этом случае для URL-адресов, так как встроенные в кодировке URL происходит для кодирования HTML и Javascript управляющих символами, это не полное решение для использования динамических серверных значений в JavaScript. Поэтому я отправляю свой ответ здесь, поэтому, надеюсь, никто не попадает в ловушку использования неправильного кодирования и не создает что-то небезопасное.

OWASP rule is:

буквенно-цифровых символов, за исключением, избежать всех символов меньше, чем 256 с форматом \ xHH для предотвращения переключения из значения данных в контексте сценария или в другой атрибут. НЕ используйте никаких быстрых клавиш , таких как \ ", потому что символ кавычки может быть сопоставлен с помощью парсера HTML-атрибутов, который запускается первым. Эти escape-клавиши также восприимчивы к атакам« escape-the-escape », где злоумышленник отправляет \ и уязвимый код получается, что в \» который позволяет котировку.

Однако проще и имо простое решение: никогда не ставить данные на стороне сервера в любой тег сценария или атрибут скрипта включен на всех. использование Атрибуты данных HTML5, тогда вы можете вставлять ваши HTML-данные в более безопасный контекст HTML.

Я вижу, что вы используете JQuery. Почему бы не сделать следующее, то вы можете использовать встроенные функции кодирования ASP.NET?

<div id="myDynamicData" data-partnerId="<%=Server.HTMLEncode(Request.QueryString["partnerid"])%>" data-id="<%=Server.HTMLEncode(Request.QueryString["id"]%>)" /> 

Или просто

<div id="myDynamicData" data-partnerId="<%:Request.QueryString["partnerid"]%>" data-id="<%:Request.QueryString["id"]%>" /> 

на более новых версиях .NET.

Ваш код становится:

function ClosePopUp(objBhID) { 
     var pageName = window.location.pathname; 
     var modalPopupBehavior = $find(objBhID); 
     if (modalPopupBehavior != null && modalPopupBehavior != 'undefined') { 
      modalPopupBehavior.hide(); 
     } 
     if (objBhID == 'bhThankMsg' && pageName == '/Projects/Comm.aspx') { 
      var objPartnerID = $('#myDynamicData').data('partnerId'); 
      var id = $('#myDynamicData').data('id'); 
      if (objPartnerID) { 
       window.location = '/Projects/Comm.aspx?Id=' + encodeURIComponent(id) + '&partnerid=' + encodeURIComponent(objPartnerID);     
      } 
      else { 
       window.location = '/Projects/Comm.aspx?Id=' + encodeURIComponent(id); 
      } 
     } 
    } 
1
<%= HttpUtility.UrlEncode(Request.QueryString["ID"]) %> 
Смежные вопросы