Лучший способ защитить от mysql инжекционных и перекрестных сценариев сайта

Пожалуйста, прекратите использовать HTMLWorker, как многократно повторялось в StackOverflow, класс HTMLWorker был оставлен в пользу XML Worker давным-давно. Мы не будем инвестировать в дальнейшее развитие HTMLWorker, поэтому использовать его очень плохо. Перейдите к XML Worker.

Также обновите до последней версии iText, версию, которую вы используете в датах с 4 февраля 2011 г. , за 4 года исправлено множество ошибок Прошло. Убедитесь, что у вас есть как контейнер iText, так и баннер XML Worker с тем же номером версии.

Изображения Base64 еще не поддерживаются, но я сделал вам очень простое доказательство концепции, показывая, насколько легко это заключается в добавлении поддержки для таких изображений. Взгляните на пример ParseHtml4 и полученный PDF: html_4.pdf .

Для этого вам нужно написать реализацию ImageProvider. Я сделал это, расширив класс AbstractImageProvider:

class Base64ImageProvider extends AbstractImageProvider {

    @Override
    public Image retrieve(String src) {
        int pos = src.indexOf("base64,");
        try {
            if (src.startsWith("data") && pos > 0) {
                byte[] img = Base64.decode(src.substring(pos + 7));
                return Image.getInstance(img);
            }
            else {
                return Image.getInstance(src);
            }
        } catch (BadElementException ex) {
            return null;
        } catch (IOException ex) {
            return null;
        }
    }

    @Override
    public String getImageRootPath() {
        return null;
    }
}

Как вы можете видеть, я проверяю существование "base64," в том, что передается XML-работнику через атрибут src тег img. Если присутствует String, я расшифровываю все, что следует за "base64,", и я возвращаю объект Image, который создается с помощью результирующих байтов.

После того, как вы создали эту реализацию ImageProvider, это только вопрос передачи его XML-работнику.

15
задан Assaf Lavie 20 February 2009 в 10:15
поделиться

3 ответа

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

В пунктах маркированного списка:

  • Отключают волшебные кавычки . Они - неверное решение, и они путают вопросы.
  • Никогда не встраивают строки непосредственно в SQL. Используйте связанные параметры или Escape (использующий mysql_real_escape_string).
  • не Делают неEscape (например, stripslashes), когда Вы получаете данные из базы данных.
  • при встраивании строк в HTML (Например, когда Вы echo), необходимо принять значение по умолчанию для выхода из строки (Используя htmlentities с ENT_QUOTES).
  • , Если необходимо встроить строки HTML в HTML, необходимо рассмотреть источник строки. Если это недоверяемо, необходимо передать его по каналу через фильтр. strip_tags находится в теории, что необходимо использовать, но она испорчена; Используйте HtmlPurifier вместо этого.

См. также: What' s лучший метод для очистки ввода данных пользователем с PHP?

35
ответ дан 1 December 2019 в 00:24
поделиться

Лучший способ против Внедрения SQL состоит в том, чтобы связать переменные, скорее затем "введя" их в строку. http://www.php.net/manual/en/mysqli-stmt.bind-param.php

10
ответ дан 1 December 2019 в 00:24
поделиться

Don’t! Используя mysql_real_escape_string достаточно для защиты Вас от Внедрения SQL, и stropslashes Вы делаете после того, как делает Вас уязвимыми для Внедрения SQL. Если Вы действительно хотите это, помещаете его прежде как в:

function madSafety($string)
{
    $string = stripslashes($string);
    $string = strip_tags($string);
    $string = mysql_real_escape_string($string);
    return $string;
}

stripslashes не действительно полезно, если Вы делаете mysql_real_escape_string.

strip_tags защищает от инжекции HTML/XML, не SQL.

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

, Когда Вы делаете использование Запросов MySQL mysql_real_escape_string. Когда Вы - использование веб-страниц вывода htmlentities. Для создания использования ссылок на сайт urlencode, †¦

Как vartec отмеченный, если можно использовать заполнителей любой ценой, делают это.

3
ответ дан 1 December 2019 в 00:24
поделиться
Другие вопросы по тегам:

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