PHP/MySQL-用于显示名称/用户名/密码的安全字符,带有PDO
这里有点像PHP/MySQL新手 我一直在构建一个基于PHP的站点,该站点使用MySQL数据库存储用户信息,如显示名、用户名和密码 我一直在学习转义、准备语句等,以及如何防止SQL注入,如“bobby”);删除表用户--” 我使用PDO准备的语句从表单获取用户输入,以便将它们注册到DB中。但是,我需要知道一些事情:PHP/MySQL-用于显示名称/用户名/密码的安全字符,带有PDO,php,mysql,sql,character-encoding,pdo,Php,Mysql,Sql,Character Encoding,Pdo,这里有点像PHP/MySQL新手 我一直在构建一个基于PHP的站点,该站点使用MySQL数据库存储用户信息,如显示名、用户名和密码 我一直在学习转义、准备语句等,以及如何防止SQL注入,如“bobby”);删除表用户--” 我使用PDO准备的语句从表单获取用户输入,以便将它们注册到DB中。但是,我需要知道一些事情: 因为我使用的是预先准备好的语句,用于显示名称、用户名、, 密码等,我可以允许使用特殊字符吗 @,#,$,甚至是单引号或双引号?那么空间呢, 国际角色、带有口音的角色或类似的角色♥ ?
首先,我要说的是,我真的很喜欢你的风格。似乎大多数人都没有花时间仔细考虑这些问题,只是简单地完成了查询,根本没有数据清理。因此,祝贺你勤奋。:) 也就是说,使用PDO,您不必担心引号会打乱您的查询。特别是当您将变量与绑定时,它允许严格的参数控制。使用它,您可以强制转换变量类型和长度。此外,特殊字符不会打乱您的查询,因为PDO也会转义它们。所以不用担心 至于使HTML显示为文本而不是实际的HTML,一个非常有用的函数是,它将HTML代码转换为字符代码。此功能还可以与可选的ENT_QUOTES标志一起使用,该标志将此
“
转换为此”
。htmlspecialchars()还有一个选项,可以将输出设置为您选择的编码。这有几个MySQL查询示例,您可以在开发过程中进行测试
这是一个很好的资源来了解你的一些问题关于什么是“可接受的”,你必须考虑整个“生命周期”的“数据”。
通常,一段数据可能以HTML表单开始,然后发布到PHP脚本中(因此,如果用户需要,他们可以不使用表单直接发布数据)。
然后您的php脚本(希望)对数据进行清理,然后将其存储起来
在数据库中,您可能正在执行备份操作,将其保存到SQLDump,或其他某种维护
显然,数据在某个时候会被读取,如果它是一种标记语言,它可能会被编译,最终被发送到某人的浏览器,在那里它可能被注入html并显示
正如您所看到的,在数据的生命周期中,有很多地方可能会出错。如果你没有考虑所有这些,你可能会看到一些常见的错误,比如反斜杠,每次保存或加载数据时都会堆积在自己身上。sql错误、易受攻击等
您希望支持哪种类型的数据?这取决于你。只需确保正确处理即可。请将您的帖子限制为一次一个问题,而且,仅仅相信
htmlspecialchars
也可能是危险的:谢谢;这很好地回答了我的“总体”问题谢谢你的链接;虽然那个页面看起来很吓人,但它看起来也像是我的项目的一个有用的安全资源。我也很欣赏对数据生命周期的概述;让我对“大局”有了一个不那么模糊的概念,正如我(相当松散地)目前所理解的:P