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

PHP/MySQL-用于显示名称/用户名/密码的安全字符,带有PDO,php,mysql,sql,character-encoding,pdo,Php,Mysql,Sql,Character Encoding,Pdo,这里有点像PHP/MySQL新手 我一直在构建一个基于PHP的站点,该站点使用MySQL数据库存储用户信息,如显示名、用户名和密码 我一直在学习转义、准备语句等,以及如何防止SQL注入,如“bobby”);删除表用户--” 我使用PDO准备的语句从表单获取用户输入,以便将它们注册到DB中。但是,我需要知道一些事情: 因为我使用的是预先准备好的语句,用于显示名称、用户名、, 密码等,我可以允许使用特殊字符吗 @,#,$,甚至是单引号或双引号?那么空间呢, 国际角色、带有口音的角色或类似的角色♥ ?

这里有点像PHP/MySQL新手

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

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

我使用PDO准备的语句从表单获取用户输入,以便将它们注册到DB中。但是,我需要知道一些事情:

  • 因为我使用的是预先准备好的语句,用于显示名称、用户名、, 密码等,我可以允许使用特殊字符吗 @,#,$,甚至是单引号或双引号?那么空间呢, 国际角色、带有口音的角色或类似的角色♥ ? 当我问允许这些角色是否“可以”时,我 想知道是否有任何进一步的安全风险可能会出现 禁止在人们的用户名或其他内容中使用引号或括号 喜欢用html标记粗体还是斜体

  • 如果允许大多数特殊字符,但不允许一些:are 有任何特定的“危险”字符(在MySQL范围内) 我绝对需要把它定为非法?(我觉得引用可能合适 这是一个议程,但我在这方面得到的信号好坏参半。)

  • 如果我允许字符超出典型的“字母数字” 和下划线“范围,我以后会遇到什么陷阱吗 (在MySQL、SQL或PHP中)是否允许使用奇怪字符?我会吗 需要以某种方式使html标记显示为字符串,而不是实际的 标签,当显示用户的用户名时?还是我需要逃跑 每当我想查询时,在人们的用户名中加引号? 或者这些都无关紧要,因为我将使用事先准备好的语句 和PDO一起

  • 像utf8或utf16这样的字符集在任何地方都可以使用吗 可以接受范围最广的显示名和用户名,而 仍然在确保这些字母可以在我的网站上呈现

  • 我知道有些西里尔字母看起来和 英国的。我过去常常直接从微软的Word中复制这些内容并使用它们 在我的用户名里。我意识到这些可以用来 通过交换一个 英语“a”表示西里尔语的“a”。带有♥ 在他们身上可能很难 搜索是否有人不熟悉alt代码。应该这样吗 你担心什么?你对此有何看法


  • 首先,我要说的是,我真的很喜欢你的风格。似乎大多数人都没有花时间仔细考虑这些问题,只是简单地完成了查询,根本没有数据清理。因此,祝贺你勤奋。:)

    也就是说,使用PDO,您不必担心引号会打乱您的查询。特别是当您将变量与绑定时,它允许严格的参数控制。使用它,您可以强制转换变量类型和长度。此外,特殊字符不会打乱您的查询,因为PDO也会转义它们。所以不用担心

    至于使HTML显示为文本而不是实际的HTML,一个非常有用的函数是,它将HTML代码转换为字符代码。此功能还可以与可选的ENT_QUOTES标志一起使用,该标志将此
    转换为此
    。htmlspecialchars()还有一个选项,可以将输出设置为您选择的编码。

    这有几个MySQL查询示例,您可以在开发过程中进行测试

    这是一个很好的资源来了解你的一些问题关于什么是“可接受的”,你必须考虑整个“生命周期”的“数据”。 通常,一段数据可能以HTML表单开始,然后发布到PHP脚本中(因此,如果用户需要,他们可以不使用表单直接发布数据)。 然后您的php脚本(希望)对数据进行清理,然后将其存储起来

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

    显然,数据在某个时候会被读取,如果它是一种标记语言,它可能会被编译,最终被发送到某人的浏览器,在那里它可能被注入html并显示

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


    您希望支持哪种类型的数据?这取决于你。只需确保正确处理即可。

    请将您的帖子限制为一次一个问题,而且,仅仅相信
    htmlspecialchars
    也可能是危险的:谢谢;这很好地回答了我的“总体”问题谢谢你的链接;虽然那个页面看起来很吓人,但它看起来也像是我的项目的一个有用的安全资源。我也很欣赏对数据生命周期的概述;让我对“大局”有了一个不那么模糊的概念,正如我(相当松散地)目前所理解的:P