PHP/MySQL - 显示名称/用户名/密码的安全字符,带有 PDO

标签 php mysql sql character-encoding pdo

这里有点 PHP/MySQL 新手...

我一直在构建一个基于 PHP 的网站,该网站使用 MySQL 数据库来存储用户信息,例如他们的显示名称、用户名和密码。

我一直在学习转义、准备语句等,以及如何防止像“bobby”这样的 SQL 注入(inject);删除表用户--。

我正在使用 PDO 准备语句从表单中获取用户输入,以便将它们注册到数据库中。但是,我需要了解一些事情:

  1. 由于我使用的是准备好的语句,显示名称、用户名、 密码等,我可以允许像这样的特殊字符吗 @、#、$,甚至“单”或“双”引号?那么空间呢, 国际字符、带重音的字符或类似 ♥ 的字符 ?当我问允许这些字符是否“可以”时,我是 想知道是否会出现任何进一步的安全风险 允许在人们的用户名或事物中使用引号或括号 喜欢粗体或斜体的 html 标签?

  2. 如果可以允许大多数特殊字符,但不允许一些:是 有任何特定的“危险”字符(在 MySQL 的范围内) 我绝对需要将其设为非法? (我觉得引号可能合适 这个议程,但我收到的信号不一。)

  3. 如果我允许使用典型的“字母数字”之外的字符 和下划线”范围,有没有我以后可能遇到的陷阱 (在 MySQL、SQL 或 PHP 中)允许使用奇怪的字符?我会吗 需要以某种方式使 html 标签显示为字符串,而不是实际的 标签,在显示人们的用户名时?或者我需要逃跑吗 每当我想向他们查询时在人们的用户名中引用? 或者这些都不重要,因为我将使用准备好的语句 与 PDO?

  4. 像 utf8 或 utf16 这样的字符集会出现在任何地方吗? 可以接受最广泛的显示名称和用户名,同时 还在确保这些字母表可以呈现在我的网站上吗?

  5. 我知道有些西里尔字母看起来与 英文的。我曾经直接从 MS Word 中复制这些并使用 他们在我的用户名中。我意识到这些可以用来 感知模仿其他成员,只需换出一个 英语“a”为西里尔字母“a”。带有 ♥ 的用户名可能很难 搜索是否有人不精通替代代码。应该这样 是一个问题?您对此有何看法?

提前感谢任何能给我一些见解的人。

最佳答案

SQL Injection Cheat Sheet有几个 MySQL 查询示例,您可以在开发过程中对其进行测试。

这是一个很好的资源,可以帮助您了解关于什么是“可接受”的一些问题,并且您必须考虑“一条数据”的整个生命周期。

通常,一段数据可能以HTML 形式 开始,然后POST 到您的PHP 脚本(因此,如果用户需要,他们可以直接POST 数据而无需表格)。 然后您的 PHP 脚本(希望)清理 数据,然后存储

在数据库中时,您可能正在执行备份 操作,将其保存到SQLDump,或进行其他某种维护。

然后显然数据会在某个时候被读取,如果它是一种 Markdown 语言,它可能会被编译,最终它被发送到某人的浏览器,它可能是< strong>注入(inject)html并显示

如您所见,在数据的生命周期中有很多地方可能会出错。如果您没有考虑到所有这些,您可能会看到一些常见的错误,例如每次保存/加载数据时反斜杠自身堆积。sql 错误,容易受到攻击等。

你想支持什么样的数据?这取决于你。只要确保您正确处理它即可。

关于PHP/MySQL - 显示名称/用户名/密码的安全字符,带有 PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11113406/

相关文章:

sql - 在 SQL Server 中使用 GROUPING SETS 时如何对特定列进行排序?

MySQL - 在全文搜索中获取列的前 100 个字符(WHERE MATCH)

php - 哪种方法对于大写文本 : CSS or PHP? 更有效

php - 由当前登录的用户安全更新或插入行 'owned'

mysql - SQL 查询获取所有帖子及其修订数据

php - 系统和用户消息结构

SQL:显示标准偏差内的平均值和最小值/最大值

php - 如何根据分配给每个页面的类别为 wordpress 菜单列表着色?

php - 如何优化这些日期范围的查询?

javascript - 在数据数组中查找下一个可用时隙