Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在何处使用strip_tags()和htmlspecialchars()_Php_Xss - Fatal编程技术网

Php 在何处使用strip_tags()和htmlspecialchars()

Php 在何处使用strip_tags()和htmlspecialchars(),php,xss,Php,Xss,我放置strip_标签和htmlspecialchars标签的位置是否有差异?我读到示例2比示例1好 但我不明白怎么会是这样,这不是一回事吗?我不知道我将它设置回一个$\u POST[]变量是否也会有不同 在我的例子中,使用示例1要容易得多,因为无论我在哪里使用$\u POST['test'],我都知道它是安全的。。。而我需要找到我echo$\u POST['test']的任何实例,并在其周围放置标记,例如示例2 一个版本真的能防止XSS泄漏吗 示例1: <?php $_POST[

我放置
strip_标签
htmlspecialchars
标签的位置是否有差异?我读到示例2比示例1好

但我不明白怎么会是这样,这不是一回事吗?我不知道我将它设置回一个
$\u POST[]
变量是否也会有不同

在我的例子中,使用示例1要容易得多,因为无论我在哪里使用
$\u POST['test']
,我都知道它是安全的。。。而我需要找到我
echo$\u POST['test']
的任何实例,并在其周围放置标记,例如示例2

一个版本真的能防止XSS泄漏吗

示例1:

<?php
    $_POST['test'] = htmlspecialchars(strip_tags($_POST['test']));

    // other code
    <form action="" method="POST">
        <input type="hidden" name="test" value="<?=$_POST['test']?>" />
    </form>
?>
<?php
    // other code
    <form action="" method="POST">
        <input type="hidden" name="test" value="<?=htmlspecialchars(strip_tags($_POST['test']))?>" />
    </form>
?>
这两个示例是相等的(在输出中)。
我看到的问题是示例1覆盖了
$\u POST
数据。 我建议不要这样做,因为您无法在脚本中的稍后点恢复原始数据(例如,如果您希望将数据保存到数据库或在非HTML上下文中输出数据)


我不知怎么地误解了这个问题,但我以前回答的这一部分仍然适用

它们是两种不同的功能

在您的情况下,您应该只使用
htmlspecialchars()
,因为此函数用于转义特殊的HTML字符(
,“


strip_tags()
相反,strip_tags()
会剥离HTML标记(以及其他一些东西)。你真的想要这种行为吗?我怀疑。剥离HTML标记与转义HTML标记的区别在于它确实会移除标记。转义只会“转义”它们,以便浏览器将它们呈现为普通文本。

如果你必须使用$\u POST['test']在多个点中,我将使用示例1,因为您不必再次处理其他函数(strip_标记、htmlspecialchars)来清理您已经拥有的相同数据。

这部分代码完美地防止了XSS

<?php
    $myVar = htmlspecialchars($_POST['test']);

    // other code
    <form action="" method="POST">
        <input type="hidden" name="test" value="<?php echo $myVar; ?>" />
    </form>
?>


htmlspecialchars
应该足够了。无论如何,我不会像示例1那样编写它,因为它不容易“参见“值编码正确-在使用站点应用编码。”。还有,更新$u POST。。?我也不推荐#2,因为$#直接在输出中发布看起来。。错误。示例1使用起来更安全,因为您说,您只需要使用这些清理功能一次,如果没有清理,您将无法响应。但另一方面,如果将其插入数据库的位置,则最终会在数据库中出现转义代码。如果你想在PDF中使用打印值呢?在这种情况下,您需要取消对数据的转义,这也是一种糟糕的方法。@CarlosCampderrós ah好的,我看到了使用示例1的缺点。。。无论如何,我都使用prepare语句,我只想将其提交回表单。@user2864740感谢您让我知道。。。我只是想做些额外的工作。。。所以我不再需要
strip\u tags()
,如果我唯一的用途是将它输入到
?@Arian中,例如,$\u POST['test']是“”,那么
htmlspecialchars
将发出“script src=hacks”。这并不是说不能注入恶意值,而是说不能注入direct XSS脚本元素。但哪个示例更好?通过执行示例1,是否存在安全漏洞?这并没有回答问题我的第一步是删除“多个点”。然后对输出中使用的所有变量进行编码,编码次数与它们出现的次数相同。