Пожалуйста, прекратите использовать 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-работнику.
Просто выполнение большого количества материала, который Вы действительно не понимаете, не собирается помогать Вам. Необходимо понять то, что инжекционные нападения и точно как и где необходимо сделать что.
В пунктах маркированного списка:
mysql_real_escape_string
). stripslashes
), когда Вы получаете данные из базы данных. echo
), необходимо принять значение по умолчанию для выхода из строки (Используя htmlentities
с ENT_QUOTES
). strip_tags
находится в теории, что необходимо использовать, но она испорчена; Используйте HtmlPurifier вместо этого. См. также: What' s лучший метод для очистки ввода данных пользователем с PHP?
Лучший способ против Внедрения SQL состоит в том, чтобы связать переменные, скорее затем "введя" их в строку. http://www.php.net/manual/en/mysqli-stmt.bind-param.php
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 отмеченный, если можно использовать заполнителей любой ценой, делают это.