php 安全,将密码类型转换为字符串

php safety, typecast password to string

问题: 将提交的密码强制转换为字符串 安全吗? $b =(字符串)$a;

评论: 我不想了解更高效的方法,我只想要一种安全的方法。仅适用于以下用例:

第 1 步 - 注册密码 (PW):

  1. 通过注册获取密码,
  2. 将其转换为字符串
  3. 要散列的字符串
  4. 在 MYSQL 中保存哈希

第 2 步 - 登录表单,获取密码:

  1. 通过表格获取密码
  2. 将其转换为字符串
  3. 从数据库获取哈希
  4. 比较两者

我想这是最简单的方法,但也是最安全的方法之一。我想允许 PW 的每个字符,

为什么不是亚洲符号。 我想:这个方法应该不会带来转义问题,因为无论是代码,现在都是一个字符串,只与一个字符串进行比较。但我可以拥有每一个角色,没有危险。 Mysql 数据库在设置为 UTF8 时应该允许每个字符,对吗? 所以请回答我:这个想法是不是很简单?

提前致谢 格尔德

我认为将密码强制转换为字符串不会影响应用程序的整体安全性,无论哪种方式。从这个意义上说,我认为这个问题有点被误导了。

作为为什么强制转换为字符串并不能真正帮助或伤害您的示例,请考虑针对数据库的最常见攻击媒介之一:SQL 注入。在接受用户输入的网页上设置一个表单,POST将其发送到服务器端脚本,该脚本使用该用户输入构建查询,突然之间您就容易受到攻击。由于所有 SQL 查询都是字符串,因此是否转换为字符串在这里并不重要。

但是,如果您知道您需要来自表单(任何表单)的字符串,而有人键入了一个整数怎么办?试试这个..

制作包含以下内容的页面:

<!DOCTYPE html>
<html>
    <head><title></title></head>
    <body>
        <form method="POST" action="/test.php">
            <input type="text" name="testInput">
            <input type="submit">
        </form>
    </body>
</html>

test.php中转出$_POST:

<?php 
    var_dump($_POST);

然后在表单字段中键入一个整数,然后查看 PHP 为它吐出的类型。这是我得到的输出:

array (size=1)
  'testInput' => string '5.25' (length=4)

因为实际上不可能构建一个包含 PHP 对象的 POST (JSON 本身在解码之前只不过是一个字符串),我们真的只担心这里的本机数据类型。正如您在上面看到的,即使是非字符串输入也会在 PHP 接收到它时转换为字符串数据。

这与数据的来源无关,无论是来自表单还是脚本,而是 PHP 接收数据并提供给您的方式。我可以以执行 cURL 请求并接收相同输出的脚本的方式构建相同的 'form'。