【发布时间】:2012-06-22 05:26:18
【问题描述】:
这里有点 PHP / MySQL 新手...
我一直在构建一个基于 PHP 的站点,该站点使用 MySQL 数据库来存储用户信息,例如他们的显示名称、用户名和密码。
我一直在学习转义、prepared statements 等,以及如何防止 SQL 注入,如“bobby'); drop table users--”。
我正在使用 PDO 准备好的语句从表单中获取用户输入,以便将它们注册到数据库中。但是,我需要知道一些事情:
由于我使用准备好的语句,用于显示名称、用户名、 密码等,我可以允许特殊字符,例如 @、#、$,甚至是“单”或“双”引号?那么空间呢, 国际字符、带口音的字符或♥ ?当我问允许这些字符是否“可以”时,我 想知道是否可能出现任何进一步的安全风险 从允许在人们的用户名或事物中使用引号或括号 喜欢粗体或斜体的html标签?
如果允许大多数特殊字符是可以的,但不允许一些: 有任何特定的“危险”字符(在 MySQL 范围内) 我绝对需要将其设为非法? (我觉得引号可能适合 这个议程,但我收到了不同的信号。)
如果我允许典型的“字母数字”之外的字符 和下划线”范围,我以后可能会遇到任何陷阱吗 (在 MySQL、SQL 或 PHP 中)允许奇怪的字符?我会 需要以某种方式使 html 标签显示为字符串,而不是实际的 标签,当显示人们的用户名时?或者我需要逃跑吗 每当我想向他们查询时,引用人们的用户名? 或者这都不重要,因为我将使用准备好的语句 使用 PDO?
像 utf8 或 utf16 这样的字符集是否会出现在任何地方,所以我 可以接受最广泛的显示名称和用户名,同时 还在确保这些字母可以在我的网站上呈现?
我知道有些西里尔字母看起来与 英语的。我曾经直接从 MS Word 中复制这些内容并使用 他们在我的用户名中。我意识到这些可以用来 感知地模仿其他成员,只需更换一个 西里尔字母“a”的英文“a”。带有♥的用户名可能很难 搜索是否有人不精通 alt 代码。如果这 担心吗?您对此有何看法?
在此先感谢任何能给我一些见解的人。
【问题讨论】:
-
请将您的帖子一次限制为一个问题
标签: php mysql sql character-encoding pdo