Как я могу избежать утечки xss? [Дубликат]

Буквально самый простой способ исправить NullReferenceExeption имеет два пути. Если у вас есть GameObject, например, с прикрепленным скриптом и переменной с именем rb (rigidbody), эта переменная начнет пустую, когда вы начнете игру. Вот почему вы получаете NullReferenceExeption, потому что на компьютере нет данных, хранящихся в этой переменной.

В качестве примера я буду использовать переменную RigidBody. Мы можем добавить данные действительно легко на самом деле несколькими способами:

  1. Добавить RigidBody к вашему объекту с помощью AddComponent> Физика> Rigidbody Затем зайдите в свой скрипт и введите rb = GetComponent<Rigidbody>();. Эта строка кода работает лучше всего под ваши функции Start() или Awake().
  2. Вы можете добавить компонент программно и назначить переменную одновременно с одной строкой кода: rb = AddComponent<RigidBody>();

Дальнейшие заметки: если вы хотите, чтобы единство добавлялось компонент для вашего объекта, и вы, возможно, забыли добавить его, вы можете ввести [RequireComponent(typeof(RigidBody))] над объявлением класса (пробел ниже всех ваших приложений). Наслаждайтесь и получайте удовольствие от игр!

201
задан TimTim 3 January 2010 в 21:09
поделиться

9 ответов

<?php
function xss_clean($data)
{
// Fix &entity\n;
$data = str_replace(array('&amp;','&lt;','&gt;'), array('&amp;amp;','&amp;lt;','&amp;gt;'), $data);
$data = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $data);
$data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data);
$data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');

// Remove any attribute starting with "on" or xmlns
$data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);

// Remove javascript: and vbscript: protocols
$data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);
$data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);

// Only works in IE: <span style="width: expression(alert('Ping!'));"></span>
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data);

// Remove namespaced elements (we do not need them)
$data = preg_replace('#</*\w+:\w[^>]*+>#i', '', $data);

do
{
    // Remove really unwanted tags
    $old_data = $data;
    $data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
}
while ($old_data !== $data);

// we are done...
return $data;
}
4
ответ дан Abdo-Host 3 September 2018 в 18:14
поделиться

Вы также можете установить некоторые заголовки ответов HTTP, связанные с XSS, через header(...)

X-XSS-Protection «1; mode = block»

, убедитесь, что режим защиты браузера XSS включен.

Content-Security-Policy "default-src 'self'; ..."

для обеспечения безопасности на стороне браузера. См. Этот раздел для сведений о политике безопасности контента (CSP): http://content-security-policy.com/ . Особенно рекомендуется настроить CSP для блокировки встроенных скриптов и внешних источников сценариев, что полезно для XSS.

для общей группы полезных заголовков HTTP-ответов, касающихся безопасности вашего webapp, посмотрите на OWASP: https://www.owasp.org/index.php/List_of_useful_HTTP_headers

1
ответ дан chris 3 September 2018 в 18:14
поделиться

Одним из наиболее важных шагов является дезинфекция любого пользовательского ввода до его обработки и / или возврата в браузер. PHP имеет некоторые функции filter ", которые могут быть использованы.

Обычно форма, которую обычно применяют атаки XSS, заключается в том, чтобы вставить ссылку на какой-то внешний сайт javascript, содержащий вредоносные намерения для пользователь. Узнайте больше об этом здесь .

Вы также захотите проверить свой сайт - я могу порекомендовать дополнение Firefox XSS Me .

12
ответ дан James Kolpack 3 September 2018 в 18:14
поделиться
  • 1
    Что мне нужно, чтобы убедиться, что я самостоятельно дезинфицирую вход. Есть ли один конкретный символ / строка, на которую я должен следить? – TimTim 3 January 2010 в 21:14
  • 2
    @TimTim - нет. Весь пользовательский вход должен всегда считаться неотвратимым. – zombat 3 January 2010 в 21:28

Перекрестная проводка это как сводная ссылка из бета-версии SO-документации, которая отключается.

Проблема

Межсайтовый скриптинг является непреднамеренным выполнение удаленного кода веб-клиентом. Любое веб-приложение может оказаться в XSS, если оно принимает входные данные от пользователя и выводит его непосредственно на веб-страницу. Если вход включает HTML или JavaScript, удаленный код может быть выполнен, когда это содержимое отображается веб-клиентом.

Например, если сторонняя сторона содержит файл JavaScript:

// http://example.com/runme.js
document.write("I'm running");

И приложение PHP напрямую выводит строку, переданную в нее:

<?php
echo '<div>' . $_GET['input'] . '</div>';

Если параметр unchecked GET содержит <script src="http://example.com/runme.js"></script>, то вывод скрипта PHP будет:

<div><script src="http://example.com/runme.js"></script></div>

Идет запуск стороннего JavaScript, и пользователь увидит «Я запущен» на веб-странице.

Решение

Как правило, никогда не доверяйте вводам, поступающим из клиент. Каждое значение GET, POST и cookie может быть вообще чем угодно и поэтому должно быть проверено. При выводе любого из этих значений удалите их, чтобы они не были оценены неожиданным способом.

Имейте в виду, что даже в простейших приложениях данные могут перемещаться, и будет сложно отслеживать все источники. Поэтому лучше всего использовать escape-выход always .

PHP предоставляет несколько способов избежать вывода в зависимости от контекста.

Функции фильтра

Функции фильтра PHPs позволяют входным данным для скрипта php быть дезинфицированным или проверенным в многими способами ]. Они полезны при сохранении или выводе на вход клиента.

Кодировка HTML

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

<?php
echo '<div>' . htmlspecialchars($_GET['input']) . '</div>';
// or
echo '<div>' . filter_input(INPUT_GET, 'input', FILTER_SANITIZE_SPECIAL_CHARS) . '</div>';

Вывод:

<div>&lt;script src=&quot;http://example.com/runme.js&quot;&gt;&lt;/script&gt;</div>

Все, что находится внутри тега <div>, будут интерпретироваться not как тег JavaScript браузером, а вместо этого как простой текстовый узел. Пользователь будет безопасно видеть:

<script src="http://example.com/runme.js"></script>

Кодировка URL

При выводе динамически сгенерированного URL PHP предоставляет функцию urlencode для безопасного вывода допустимых URL-адресов. Например, если пользователь может вводить данные, которые становятся частью другого параметра GET:

<?php
$input = urlencode($_GET['input']);
// or
$input = filter_input(INPUT_GET, 'input', FILTER_SANITIZE_URL);
echo '<a href="http://example.com/page?input="' . $input . '">Link</a>';

Любой вредоносный ввод будет преобразован в параметр кодированного URL.

Использование специализированных внешних библиотек или списков OWASP AntiSamy

Иногда вам нужно отправить HTML или другие входы кода. Вам необходимо будет сохранить список авторизованных слов (белый список) и неавторизованный (черный список).

Вы можете загружать стандартные списки, доступные на веб-сайте OWASP AntiSamy . Каждый список подходит для определенного вида взаимодействия (ebay api, tinyMCE и т. Д.). И это с открытым исходным кодом.

Существуют библиотеки, которые могут фильтровать HTML и предотвращать атаки XSS для общего случая и выполнять как минимум, так и списки AntiSamy с очень простым использованием. Например, у вас есть HTML Purifier

4
ответ дан Matt S 3 September 2018 в 18:14
поделиться

В основном вам нужно использовать функцию htmlspecialchars() всякий раз, когда вы хотите вывести что-то в браузер, который поступает с пользовательского ввода.

Правильный способ использования этой функции что-то вроде этого:

echo htmlspecialchars($string, ENT_QUOTES, 'UTF-8');

В Google Code University также есть эти очень образовательные видеоролики в Интернете:

230
ответ дан Quentin 3 September 2018 в 18:14
поделиться
  • 1
    @TimTim: В большинстве случаев, да. Однако, когда вам нужно разрешить ввод в HTML, все становится немного сложнее, и если это так, я рекомендую вам использовать что-то вроде htmlpurifier.org – Alix Axel 3 January 2010 в 21:23
  • 2
    @Alix Axel, так ваш ответ использовать htmlspecialchars или использовать htmlpurifier.org ? – TimTim 3 January 2010 в 21:39
  • 3
    Если вам нужно принять HTML-вход, используйте HTML Purifier, если не использовать htmlspecialchars(). – Alix Axel 3 January 2010 в 21:41
  • 4
    htmlspecialchars или htmlentities? Проверьте здесь stackoverflow.com/questions/46483/… – kiranvj 16 November 2012 в 08:19
  • 5
    В большинстве случаев это правильно, но это не так просто. Вы должны подумать о том, чтобы положить ненадежную строку в HTML, Js, Css и рассмотреть возможность размещения ненадежного HTML в HTML. Посмотрите на это: owasp.org/index.php/… – bronze man 29 May 2014 в 18:43

В порядке предпочтения:

  1. Если вы используете движок шаблонов (например, Twig, Smarty, Blade), убедитесь, что он предлагает контекстно-зависимое экранирование. Я знаю по опыту, что делает Твиг. {{ var|e('html_attr') }}
  2. Если вы хотите разрешить HTML, используйте Очиститель HTML . Даже если вы считаете, что принимаете только Markdown или ReStructuredText, вы все равно хотите очистить HTML эти языки разметки.
  3. В противном случае используйте htmlentities($var, ENT_QUOTES | ENT_HTML5, $charset) и убедитесь, что остальная часть вашего документа использует тот же набор символов, что и $charset. В большинстве случаев 'UTF-8' является желаемым набором символов.

Кроме того, убедитесь, что вы выбрали на выходе, а не на входе .

7
ответ дан Scott Arciszewski 3 September 2018 в 18:14
поделиться

Одна из моих любимых ссылок OWASP - это объяснение кросс-сайта Scripting , потому что, хотя существует большое количество векторов атаки XSS, некоторые из немногих правил могут защитить от большинства из них значительно!

Это PHP Cheat Sheet

35
ответ дан Wahyu Kristianto 3 September 2018 в 18:14
поделиться

Многие фреймворки помогают обрабатывать XSS по-разному. Когда вы катаетесь самостоятельно или если есть какая-то проблема XSS, мы можем использовать filter_input_array (доступно в PHP 5> = 5.2.0, PHP 7.) Обычно я добавляю этот фрагмент к моему SessionController, потому что все вызовы пройдите туда до того, как какой-либо другой контроллер взаимодействует с данными. Таким образом, все входные данные пользователя дезинфицируются в одном центральном месте. Если это сделано в начале проекта или до того, как ваша база данных отравлена, у вас не должно быть никаких проблем во время выхода ... останавливает мусор, мусор.

/* Prevent XSS input */
$_GET   = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
/* I prefer not to use $_REQUEST...but for those who do: */
$_REQUEST = (array)$_POST + (array)$_GET + (array)$_REQUEST;

Вышеупомянутое удалит ВСЕ HTML & amp; скриптовые теги. Если вам нужно решение, которое позволяет безопасные метки на основе белого списка, посмотрите HTML Purifier .


Если ваша база данных уже отравлена ​​или вы хотите иметь дело с XSS во время выхода, OWASP рекомендует создать пользовательскую функцию-обертку для echo и использовать ее в любом случае вы выведете пользовательские значения:

//xss mitigation functions
function xssafe($data,$encoding='UTF-8')
{
   return htmlspecialchars($data,ENT_QUOTES | ENT_HTML401,$encoding);
}
function xecho($data)
{
   echo xssafe($data);
}
2
ответ дан webaholik 3 September 2018 в 18:14
поделиться

Используйте htmlspecialchars на PHP. В HTML старайтесь избегать использования:

element.innerHTML = “…”; element.outerHTML = “…”; document.write(…); document.writeln(…);

, где var - , управляемый пользователем .

Также, очевидно, избегайте eval(var), если вам нужно использовать любой из них, тогда попробуйте JS, избегая их, HTML уберет их, и вам, возможно, придется сделать еще кое-что, но для основ этого должно быть достаточно.

0
ответ дан ρяσѕρєя K 3 September 2018 в 18:14
поделиться
Другие вопросы по тегам:

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