Sun*_*One 5 php security url urlencode html-entities
我在另一个与urlencode()相关的论坛中问了一个问题,当一个人看起来轻快地说它绝对需要在它上面使用htmlentities时,并且还建议我每次写一个URL都应该这样做."为了有效和安全,他说".我不明白为什么它可能是一个安全问题.这是他提到的代码:
echo '<a href="index.php?' . htmlentities('page=encode&code='.urlencode($code).'&login='.urlencode($login).'&codeconf=' . urlencode($codeconf)) . '">';
Run Code Online (Sandbox Code Playgroud)
PHP手册确实提到了htmlentities.但没有进一步的解释:
注意... PHP支持通过arg_separator .ini指令将参数分隔符更改为W3C建议的分号.不幸的是,大多数用户代理不以这种分号分隔格式发送表单数据.一种更便携的方法是使用&而不是&作为分隔符.您不需要为此更改PHP的arg_separator.保留为&,但只需使用htmlentities()或htmlspecialchars()对您的URL进行编码.
我换成"&"通过与放大器; ,我在W3C验证器中验证了我的页面,它出来了.
我仍然担心这个问题.
这与URL中的 HTML实体无关.这是关于您将任意数据放入HTML,这意味着您需要HTML转义其中的任何特殊字符.这个数据恰好是一个URL是无关紧要的.
urlencode以保留URL中具有特殊含义的字符.&,您的数据中存在一个需要&通过HTML规则转义的内容.如果您没有在HTML上下文中使用该URL,则无需HTML转义它.HTML实体在URL中没有位置.与任何其他数据一样,HTML上下文中的URL必须进行HTML转义.