Что для меня работало:
Вместо записи app.use(express.static(__dirname + 'public/images'));
в вашем app.js
Просто напишите app.use(express.static('public/images'));
, т.е. удалите корень имя каталога в пути. И тогда вы можете эффективно использовать статический путь в других js-файлах, например:
<img src="/images/misc/background.jpg">
Надеюсь, это поможет:)
Я думаю, что Вы нападаете на него от неправильного угла путем попытки закодировать все отправленные данные.
Примечание, что" <
" мог также прибыть из других внешних источников, как поле базы данных, конфигурация, файл, канал и так далее.
, Кроме того, "<
" не по сути опасно. Это только опасно в определенном контексте: при записи строк, которые не были закодированы к выводу HTML (из-за XSS).
В других контекстах различные подстроки опасны, например, если Вы пишете обеспеченный пользователями URL в ссылку, подстрока" javascript:
" может быть опасной. Символ одинарной кавычки, с другой стороны, опасен при интерполяции строк в SQL-запросах, но совершенно безопасный, если это - часть имени, отправленного от формы или чтения от поля базы данных.
нижняя строка: Вы не можете отфильтровать случайный вход для опасных символов, потому что любой символ может быть опасным при правильных обстоятельствах. Необходимо закодировать в точке, где некоторые определенные символы могут стать опасными, потому что они пересекаются в различный подъязык, где у них есть особое значение. Когда Вы пишете строку в HTML, необходимо закодировать символы, которые имеют особое значение в HTML, с помощью Сервера. HtmlEncode. При передаче строки динамическому SQL-оператору необходимо закодировать различные символы (или лучше, позвольте платформе сделать это для Вас при помощи подготовленных операторов и т.п.)..
, Когда Вы уверены Вы, HTML - кодирует везде, Вы передаете строки HTML, затем устанавливаете validateRequest="false"
в <%@ Page ... %>
директива в Вашем .aspx
файл (файлы).
В.NET 4 Вы, возможно, должны сделать немного больше. Иногда необходимо также добавить <httpRuntime requestValidationMode="2.0" />
к web.config ( ссылка ).
Необходимо использовать Сервер. Метод HtmlEncode для защиты сайта от опасного входа.
Вы можете HTML кодировать содержание текстового поля, но к сожалению который не будет мешать исключению произойти. По моему опыту, вокруг нет никакого пути, и необходимо отключить проверку страницы. Путем выполнения этого Вы говорите: "Я буду осторожен, я обещаю".
Пока это [только 113] "<"; и">" (а не сама двойная кавычка) символы и Вы используете их в контексте как < входное значение = " это "/> Вы в безопасности (в то время как для < textarea> этот </textarea> Вы были бы уязвимы, конечно). Это может упростить Вашу ситуацию, но для что-либо [еще 114] использование одно из других отправленных решений.
Я предполагаю, что Вы могли сделать это в модуле; но это оставляет открытым некоторые вопросы; что, если Вы хотите сохранить вход к базе данных? Внезапно, потому что Вы сохраняете закодированные данные к базе данных, Вы заканчиваете тем, что доверяли входу от него, который является, вероятно, плохой идеей. Идеально Вы храните сырые данные незакодированные данные в базе данных и кодировать каждый раз.
Отключение защиты на на уровень страницы и затем кодирование каждый раз является более оптимальным вариантом.
Вместо того, чтобы использовать Сервер. HtmlEncode необходимо посмотреть на более новое, больше завершенное библиотека Anti-XSS от команды Microsoft ACE.
Если Вы просто надеетесь говорить Вашим пользователям это < и> не должны использоваться, НО, Вы не хотите всю форму, обработал/отправил назад (и потеряйте весь вход), заранее Вы не могли просто вставить блок проверки допустимости вокруг поля для экранирования на тех (и возможно другое потенциально опасное) символов?
Примите во внимание, что некоторые средства управления.NET будут автоматически HTML кодировать вывод. Например, установка.Text свойства на управлении TextBox автоматически закодирует его. Это конкретно означает преобразовывать <
в <
, >
в >
и &
в &
. Так опасайтесь делать это...
myTextBox.Text = Server.HtmlEncode(myStringFromDatabase); // Pseudo code
Однако.Text свойство для HyperLink, Литерала и Маркировки не будет HTML кодировать вещи, таким образом обертывая Сервер. HtmlEncode (); вокруг чего-либо устанавливаемого на этих свойствах необходимость, если Вы хотите предотвратить <script> window.location = "http://www.google.com"; </script>
от того, чтобы быть произведенным в свою страницу и впоследствии выполняемый.
Делают немного экспериментирования для наблюдения то, что кодируется и что не делает.
Отключите проверку страницы, если Вы действительно нуждаетесь в специальных символах как, >
, <
, и т.д. Тогда удостоверяетесь, что, когда ввод данных пользователем отображен, данные закодированы HTML.
существует уязвимость системы обеспечения безопасности с проверкой страницы, таким образом, это может быть обойдено. Также на проверку страницы нельзя только полагаться.
Если Вы не хотите отключать 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);")
Существует другое решение этой ошибки, если вы используете 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
Вы можете поймать эту ошибку в 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
Если вы используете .NET 4.0, обязательно добавьте это в файл web.config внутри тегов
:
<httpRuntime requestValidationMode="2.0" />
В .NET 2.0 валидация запроса применялась только к aspx
запросам. В .NET 4.0 это было расширено и теперь включает все запросы. Вы можете вернуться к только выполнению проверки XSS при обработке .aspx
, указав:
requestValidationMode="2.0"
Вы можете отключить проверку запроса полностью, указав:
validateRequest="false"