Лучший способ обработать безопасность и избежать XSS с пользователем ввел URL

Это произошло со мной после того, как я импортировал дамп в Windows 10 с MYSQL Workbench 6.3 Community, при этом «root @% не существует». Хотя пользователь существовал. Сначала я попытался прокомментировать DEFINER, но это не сработало. Затем я заменил строку «root @%» на «root @ localhost» и повторно импортировал дамп. Это сделал трюк для меня.

53
задан Keith 16 October 2008 в 18:35
поделиться

6 ответов

Если Вы думаете, что URL не могут содержать код, думайте снова!

https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

Read, что, и плачут.

Вот то, как мы делаем это на Переполнении стека:

/// <summary>
/// returns "safe" URL, stripping anything outside normal charsets for URL
/// </summary>
public static string SanitizeUrl(string url)
{
    return Regex.Replace(url, @"[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]", "");
}
55
ответ дан Keith 7 November 2019 в 18:47
поделиться

Просто HTMLEncode ссылки, когда Вы производите их. Удостоверьтесь, что Вы не позволяете javascript: ссылки. (Лучше иметь белый список протоколов, которые приняты, например, http, https, и mailto.)

3
ответ дан Patrick McElhaney 7 November 2019 в 18:47
поделиться

Процесс рендеринга ссылки "безопасный" должен пройти три или четыре шага:

  • Unescape/re-encode строка Вам дали (RSnake зарегистрировал много приемов по телефону http://ha.ckers.org/xss.html что выход использования и кодировка UTF).
  • Чистят соединение: Regexes являются хорошим началом - удостоверяются, что усекли строку или выбросили его, если это содержит, "(или независимо от того, что Вы используете для закрытия атрибутов в выводе); при выполнении ссылок только как ссылок на другую информацию, можно также вызвать протокол в конце этого процесса - если часть перед первым двоеточием не является 'http', или 'https' тогда добавляют 'http://' к запуску. Это позволяет Вам создавать применимые ссылки из неполного входа, поскольку пользователь ввел бы в браузер и дает Вам последний выстрел в сбивание с толку безотносительно вреда, кто-то попытался красться в.
  • Проверка, что результатом является хорошо сформированный URL (protocol://host.domain [: порт] [/путь] [/[файл]] [? queryField=queryValue] [#anchor]).
  • Возможно проверяют результат по черному списку сайта или попытке выбрать его через своего рода вредоносное средство проверки.

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

14
ответ дан Bell 7 November 2019 в 18:47
поделиться

Разрешение URL и разрешение JavaScript являются 2 разными вещами.

-7
ответ дан Nick Stinemates 7 November 2019 в 18:47
поделиться

Как насчет того, чтобы не отобразить их как ссылку? Просто используйте текст.

Объединенный с предупреждением продолжиться на Ваш собственный риск может быть достаточно.

дополнение - видит также , я должен санировать разметку HTML для размещенного CMS? для обсуждения очистки ввода данных пользователем

1
ответ дан Community 7 November 2019 в 18:47
поделиться

Вы не определяете язык своего приложения, я тогда предположу ASP.NET, и для этого можно использовать Microsoft Anti-Cross Site Scripting Library

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

, В то время как Вы находитесь по теме, почему не, учитывая чтение на Руководство по проектированию для Безопасных веб-приложений

, Если какой-либо другой язык...., если существует библиотека для ASP.NET, должен быть доступен также для другого вида языка (PHP, Python, ROR, и т.д.)

3
ответ дан Brad Patton 7 November 2019 в 18:47
поделиться
Другие вопросы по тегам:

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