decodeEntities显示图像而不是图像标记

时间:2017-02-28 07:27:08

标签: php jquery autocomplete xss htmlspecialchars

在jquery autocomplete中,我在json编码中使用htmlspecialchars()作为标题字符串。当我删除那个htmlspecialchars时,有一个XSS漏洞。但是htmlspecialchars没有转义“&”标题字符串中的'(单引号)。因为我已经通过引用以下url添加了decodeHTMLEntities。现在没有XSS漏洞而且没有转义数据aslo.But当我给出图像标签作为输入时,它直接显示图像,而不是我需要显示图像标记代码。任何人都可以帮我这个。我在给你发送我的代码

How to decode HTML entities using jQuery?

<?php 
  $test = htmlspecialchars( '<img src="https://google.com" ></img>',ENT_HTML401,'utf-8');
 ?>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
<body>
<div id="asd"></div>
<script type='text/javascript'>
var decodeEntities = (function() {
// this prevents any overhead from creating the object each time
var element = document.createElement('textarea');

function decodeHTMLEntities (str) {
if(str && typeof str === 'string') {
  // strip script/html tags
  str = str.replace(/<img[^>]*>([\S\s]*?)<\/img>/gmi, '');
  str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
  str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
  element.innerHTML = str;
  str = element.textContent;
  element.textContent = '';
}

 return str;
}

return decodeHTMLEntities;
})();
document.getElementById('asd').innerHTML = decodeEntities('<?php echo $asd;
?>');
 </script>

 </body>
 </html>

0 个答案:

没有答案