Я много пробовал и устал сейчас. Итак, вы хотите знать, почему этот код (HtmlPurifier) не удаляет тег скрипта.
Это мой контроллер opencart 2.1.0.2-›register.php
$custmer_data = $this->request->post; // get all post-data
///////////////// html purifier ////////////
$log_file_name = "Reg_LOGs.log";
$logger = new Log($log_file_name); //just passed the file name as file_name.log
$logger->write($custmer_data);
$logger->write($custmer_data['firstname']);
$logger->write($custmer_data['lastname']);
if(@require_once('htmlpurifier/library/HTMLPurifier.auto.php'))
{
$config = HTMLPurifier_Config::createDefault();
$config->set('Core.Encoding', 'UTF-8');
$config->set('Core.AggressivelyRemoveScript', true);
$allowedElements = [
'p[style]',
'br',
'b',
'strong',
'i',
'em',
's',
'u',
'ul',
'ol',
'li',
'span[class|data-custom-id|contenteditable]',
'table[border|cellpadding|cellspacing]',
'tbody',
'tr',
'td[valign]',
];
$config->set('HTML.Allowed', implode(',', $allowedElements));
$def = $config->getHTMLDefinition(true);
$def->addAttribute('span', 'data-custom-id', 'Text');
$def->addAttribute('span', 'contenteditable', 'Text');
$purifier = new HTMLPurifier($config);
$test_f = $purifier->purify($custmer_data['firstname']);
$test_l = $purifier->purify($custmer_data['lastname']);
$logger->write($test_f);
$logger->write($test_l);
}
///////////////// html purifier ends ////////////
Я ввожу значения для имени и фамилии, например:
имя : <input type="text" name="firstname" value="<a onclick="script:al">L</a>" placeholder="First Name" id="input-firstname" class="form-control">
фамилия : <input type="text" name="lastname" value="<a href="javascript:alert('Hello Stack Overflow')" onclick="javascript:alert('onclick')">Link with javascript</a>" placeholder="Last Name" id="input-lastname" class="form-control">
Перед применением HTMLPurifier вывод будет таким:
$logger-›write($custmer_data['имя']); записывается как 2020-07-23 8:36:33 - <a onclick="script:al">L</a>
и
$logger-›write($custmer_data['lastname']); записывается как 2020-07-23 8:36:33 - <a href="javascript:alert('Hello Stack Overflow')" onclick="javascript:alert('onclick')">Link with javascript</a>
После применения HTMLPurifier результат будет таким:
$logger-›write($custmer_data['имя']); записывается как 2020-07-23 8:36:33 - <a onclick="script:al">L</a>
и
$logger-›write($custmer_data['lastname']); записывается как 2020-07-23 8:36:33 - <a href="javascript:alert('Hello Stack Overflow')" onclick="javascript:alert('onclick')">Link with javascript</a>
Так что тег script вообще не удаляется.
Пожалуйста, помогите мне в этом.
библиотека, которую я использую: http://htmlpurifier.org/