1
|
Aykut Çevik · 技术社区 · 14 年前 |
![]() |
1
1
对你想从用户那里得到什么有一个好的想法。
无论您如何转义和清理它们的字符串,这都是错误的,因为这不是验证枚举的方法。比较:
…这不需要讨论字符串转义或SQL注入,因为您只想从用户那里得到一个yes/no(或升序/降序)答案。 你想让他们输入评论吗?为什么不允许HTML标记?如果用户想输入HTML代码呢?
数据库中的值应反映用户逐字输入的内容;不翻译,不转义。假设要从评论中删除所有HTML标记。当您决定以JSON格式将注释发送到某个地方时会发生什么情况?你也去掉了JSON控制字符吗?其他格式呢?如果HTML引入了一个名为“:”的标记,会发生什么情况?你会在数据库里从所有的评论中去掉笑脸吗? 答案是否定的,因为你不希望HTML安全,JSON安全,一些奇怪的格式和smileys安全的用户输入。您需要最多1024个字符的文本。检查一下。把它存起来。 现在,显示部分更难。为了显示:
在HTML中,您需要编写如下内容:
在JSON中,您可以执行以下操作:
这就是为什么您应该使用语言工具来转义数据 当你使用它的时候 .
当然,SQL也是如此,这就是为什么在使用诸如
摘要
*:您还应该定义“字符”在这里的含义。例如,UTF-8可以使用多个字节来编码一个代码点。“字符”是指“字节”还是“Unicode码位”? |
![]() |
2
1
如果您使用的是PDO,请确保使用准备好的语句-这些语句会自动清除传入的数据。
如果使用mysql函数,请通过
您还可以进行验证,例如确保变量是可接受范围之一:
|
![]() |
3
0
你说的是两种数据卫生。一个是将用户生成的数据放入数据库,另一个是将用户生成的数据放入网页。对于前者,你应该听从亚当的建议。以后你应该调查 htmlspecialchars . 不要把这两件事混为一谈,因为他们做的是两件完全不同的事。为此目的,卫生工作只应在最后时刻进行。在更新数据库之前使用adam的建议。在回显数据之前使用htmlspecialchars。做 不 在将数据添加到数据库之前,请对其使用htmlspecialchars。
|
![]() |
Karlo · PHP Sqlite PDO最新版本 4 月前 |
![]() |
Malte · 检查远程服务器上是否存在文件(使用PHP)[关闭] 4 月前 |
![]() |
Bard.Mus · 迁移后的数据库字符集环境 4 月前 |