【发布时间】:2014-07-04 19:34:36
【问题描述】:
我一直在阅读 htmlspecialchars() 以从数据库中转义用户输入和用户输入。在任何人说什么之前,是的,我正在过滤数据库输入以及使用带有绑定的准备好的语句。我只关心保护输出。
我对何时使用ENT_COMPAT、ENT_QUOTES、ENT_NOQUOTES 感到困惑。我在进行研究时发现了以下摘录:
htmlspecialchars()调用中的第二个参数是ENT_COMPAT。我有 使用它是因为它是一个安全的默认值:它也会逃脱 双引号字符"。你只有在你真正需要的时候才需要这样做 在 HTML 属性中输出(如<img src="<?php echo htmlspecialchars($img_path, ENT_COMPAT, 'UTF-8')">)。你可以使用ENT_NOQUOTES其他任何地方。
我在其他地方也发现了类似的 cmets。为属性转换单引号和/或双引号而不在其他地方转换它们的目的是什么?我唯一能想到的是,例如,如果您将实际的 html 添加到页面中:
我的变量是:<img src="somepic.jpg" alt="some text"> 如果您在此处转换双引号,则由于转义引号,它将无法正确呈现。在摘录中给出的示例中,尽管我什至想不出使用任何类型引号的实例。
其次,在这个特定的参考资料中,它说在其他任何地方都使用ENT_NOQUOTES。为什么?我个人的思考过程告诉我在任何地方都使用 ENT_QUOTES 和 ENT_NOQUOTES 当且仅当变量是需要它们的实际 html 属性时。
我已经做了很多搜索和阅读,但仍然对所有这些感到困惑。我的主要目标是保护页面的输出,因此不会发生 html、php、js 操作。
【问题讨论】:
-
@MarcB 你阅读理解失败。他说从数据库,而不是到数据库。
-
马克...是的,不开玩笑...我想您可能错过了一些帖子。
标签: php security htmlspecialchars