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


php safety, typecast password to string

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

评论:我不想知道更高性能的方式,我只想要一种安全的方式。仅适用于以下用例:

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

  1. 通过注册获得PW,
  2. 将其转换为字符串
  3. 字符串到哈希
  4. 在 MYSQL 中保存哈希

步骤2 - 登录表单,获取PW:

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

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

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

提前谢谢你格尔德

无论

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

作为为什么强制转换为字符串不会真正帮助您或伤害您的示例,请考虑针对数据库的最常见攻击媒介之一: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 请求并接收相同输出的脚本的方式构造相同的"表单"。