От клиента было обнаружено потенциально опасное значение Request.Form

Что для меня работало:

Вместо записи app.use(express.static(__dirname + 'public/images')); в вашем app.js

Просто напишите app.use(express.static('public/images'));

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

<img src="/images/misc/background.jpg">

Надеюсь, это поможет:)

1406
задан Peter Mortensen 16 June 2017 в 22:24
поделиться

12 ответов

Я думаю, что Вы нападаете на него от неправильного угла путем попытки закодировать все отправленные данные.

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

, Кроме того, "<" не по сути опасно. Это только опасно в определенном контексте: при записи строк, которые не были закодированы к выводу HTML (из-за XSS).

В других контекстах различные подстроки опасны, например, если Вы пишете обеспеченный пользователями URL в ссылку, подстрока" javascript:" может быть опасной. Символ одинарной кавычки, с другой стороны, опасен при интерполяции строк в SQL-запросах, но совершенно безопасный, если это - часть имени, отправленного от формы или чтения от поля базы данных.

нижняя строка: Вы не можете отфильтровать случайный вход для опасных символов, потому что любой символ может быть опасным при правильных обстоятельствах. Необходимо закодировать в точке, где некоторые определенные символы могут стать опасными, потому что они пересекаются в различный подъязык, где у них есть особое значение. Когда Вы пишете строку в HTML, необходимо закодировать символы, которые имеют особое значение в HTML, с помощью Сервера. HtmlEncode. При передаче строки динамическому SQL-оператору необходимо закодировать различные символы (или лучше, позвольте платформе сделать это для Вас при помощи подготовленных операторов и т.п.)..

, Когда Вы уверены Вы, HTML - кодирует везде, Вы передаете строки HTML, затем устанавливаете validateRequest="false" в <%@ Page ... %> директива в Вашем .aspx файл (файлы).

В.NET 4 Вы, возможно, должны сделать немного больше. Иногда необходимо также добавить <httpRuntime requestValidationMode="2.0" /> к web.config ( ссылка ).

1046
ответ дан Peter Mortensen 16 June 2017 в 22:24
поделиться

Необходимо использовать Сервер. Метод HtmlEncode для защиты сайта от опасного входа.

[еще 110] информация здесь

2
ответ дан bastos.sergio 16 June 2017 в 22:24
поделиться

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

46
ответ дан Kolappan Nathan 16 June 2017 в 22:24
поделиться

Пока это [только 113] "<"; и">" (а не сама двойная кавычка) символы и Вы используете их в контексте как < входное значение = " это "/> Вы в безопасности (в то время как для < textarea> этот </textarea> Вы были бы уязвимы, конечно). Это может упростить Вашу ситуацию, но для что-либо [еще 114] использование одно из других отправленных решений.

4
ответ дан Paweł Hajdan 16 June 2017 в 22:24
поделиться

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

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

Вместо того, чтобы использовать Сервер. HtmlEncode необходимо посмотреть на более новое, больше завершенное библиотека Anti-XSS от команды Microsoft ACE.

12
ответ дан Peter Mortensen 16 June 2017 в 22:24
поделиться

Если Вы просто надеетесь говорить Вашим пользователям это < и> не должны использоваться, НО, Вы не хотите всю форму, обработал/отправил назад (и потеряйте весь вход), заранее Вы не могли просто вставить блок проверки допустимости вокруг поля для экранирования на тех (и возможно другое потенциально опасное) символов?

4
ответ дан Captain Toad 16 June 2017 в 22:24
поделиться

Примите во внимание, что некоторые средства управления.NET будут автоматически HTML кодировать вывод. Например, установка.Text свойства на управлении TextBox автоматически закодирует его. Это конкретно означает преобразовывать < в &lt;, > в &gt; и & в &amp;. Так опасайтесь делать это...

myTextBox.Text = Server.HtmlEncode(myStringFromDatabase); // Pseudo code

Однако.Text свойство для HyperLink, Литерала и Маркировки не будет HTML кодировать вещи, таким образом обертывая Сервер. HtmlEncode (); вокруг чего-либо устанавливаемого на этих свойствах необходимость, если Вы хотите предотвратить <script> window.location = "http://www.google.com"; </script> от того, чтобы быть произведенным в свою страницу и впоследствии выполняемый.

Делают немного экспериментирования для наблюдения то, что кодируется и что не делает.

33
ответ дан Peter Mortensen 16 June 2017 в 22:24
поделиться

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

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

См.: http://web.archive.org/web/20080913071637/http://www.procheckup.com:80/PDFs/bypassing-dot-NET-ValidateRequest.pdf

9
ответ дан Jack91255 16 June 2017 в 22:24
поделиться

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

function AlphanumericValidation(evt)
{
    var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode :
        ((evt.which) ? evt.which : 0));

    // User type Enter key
    if (charCode == 13)
    {
        // Do something, set controls focus or do anything
        return false;
    }

    // User can not type non alphanumeric characters
    if ( (charCode <  48)                     ||
         (charCode > 122)                     ||
         ((charCode > 57) && (charCode < 65)) ||
         ((charCode > 90) && (charCode < 97))
       )
    {
        // Show a message or do something
        return false;
    }
}

Тогда в коде позади, на событии PageLoad, добавляет атрибут к Вашему управлению со следующим кодом:

Me.TextBox1.Attributes.Add("OnKeyPress", "return AlphanumericValidation(event);")
23
ответ дан Peter Mortensen 16 June 2017 в 22:24
поделиться

Существует другое решение этой ошибки, если вы используете ASP.NET MVC:

Пример C #:

[HttpPost, ValidateInput(false)]
public ActionResult Edit(FormCollection collection)
{
    // ...
}

Пример Visual Basic:

<AcceptVerbs(HttpVerbs.Post), ValidateInput(False)> _
Function Edit(ByVal collection As FormCollection) As ActionResult
    ...
End Function
499
ответ дан 22 November 2019 в 20:19
поделиться

Вы можете поймать эту ошибку в Global.asax. Я все еще хочу подтвердить, но показать соответствующее сообщение. В указанном ниже блоге был доступен такой образец.

    void Application_Error(object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();

        if (ex is HttpRequestValidationException)
        {
            Response.Clear();
            Response.StatusCode = 200;
            Response.Write(@"[html]");
            Response.End();
        }
    }

Перенаправление на другую страницу также кажется разумным ответом на исключение.

http://www.romsteady.net/blog/2007/06/how-to-catch-httprequestvalidationexcep.html

42
ответ дан 22 November 2019 в 20:19
поделиться

Если вы используете .NET 4.0, обязательно добавьте это в файл web.config внутри тегов :

<httpRuntime requestValidationMode="2.0" />

В .NET 2.0 валидация запроса применялась только к aspx запросам. В .NET 4.0 это было расширено и теперь включает все запросы. Вы можете вернуться к только выполнению проверки XSS при обработке .aspx, указав:

requestValidationMode="2.0"

Вы можете отключить проверку запроса полностью, указав:

validateRequest="false"
213
ответ дан 22 November 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: