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