php 安全,将密码类型转换为字符串
php safety, typecast password to string
问题:
将提交的密码强制转换为字符串 不 安全吗?
$b =(字符串)$a;
评论:
我不想了解更高效的方法,我只想要一种安全的方法。仅适用于以下用例:
第 1 步 - 注册密码 (PW):
- 通过注册获取密码,
- 将其转换为字符串
- 要散列的字符串
- 在 MYSQL 中保存哈希
第 2 步 - 登录表单,获取密码:
- 通过表格获取密码
- 将其转换为字符串
- 从数据库获取哈希
- 比较两者
我想这是最简单的方法,但也是最安全的方法之一。我想允许 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'。
问题: 将提交的密码强制转换为字符串 不 安全吗? $b =(字符串)$a;
评论: 我不想了解更高效的方法,我只想要一种安全的方法。仅适用于以下用例:
第 1 步 - 注册密码 (PW):
- 通过注册获取密码,
- 将其转换为字符串
- 要散列的字符串
- 在 MYSQL 中保存哈希
第 2 步 - 登录表单,获取密码:
- 通过表格获取密码
- 将其转换为字符串
- 从数据库获取哈希
- 比较两者
我想这是最简单的方法,但也是最安全的方法之一。我想允许 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'。