问题:将提交的密码类型转换为字符串不安全吗? $b =(字符串)$a;
评论:我不想知道更高性能的方式,我只想要一种安全的方式。仅适用于以下用例:
第 1 步 - 注册密码 (PW):
- 通过注册获得PW,
- 将其转换为字符串
- 字符串到哈希
- 在 MYSQL 中保存哈希
步骤2 - 登录表单,获取PW:
- 通过表格获取PW
- 将其转换为字符串
- 从数据库获取哈希
- 比较两者
我想这是最简单的方法,但也是最安全的方法之一。我想允许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 请求并接收相同输出的脚本的方式构造相同的"表单"。