如何使用 PDO 以安全的方式显示和隐藏密码
Posted
技术标签:
【中文标题】如何使用 PDO 以安全的方式显示和隐藏密码【英文标题】:How to show and hide a password in a secure way using PDO 【发布时间】:2022-01-09 07:05:43 【问题描述】:美好的一天,
我想显示存储在 SQL-Server 中的密码,并在单击按钮后显示。 单击按钮时,必须使用 PDO 发出请求。通过存储在 SQL Server 中加密的密码并在用户单击后解密密码,我将如何以安全的方式执行此操作?
添加一个按钮来编辑此输入字段,这样用户可以在具有所需权限的情况下更新此密码。
我将添加步骤以对查看密码的人进行审核。
例如
<!DOCTYPE html>
<html>
<head>
<title>Change Input Text Value OnClick Event</title>
</head>
<body>
<input type="text" id="my_field" value="***********">
<button onclick="change()">Show Password</button>
<script>
function change()
var txt = "My Password"; // get this value using php, what would the best way be toencrypt and decrypt passwords
document.getElementById("my_field").value = txt;
</script>
</body>
</html>
password_verify 示例
// See the password_hash() example to see where this came from.
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';
if (password_verify('rasmuslerdorf', $hash))
echo 'Password is valid!';
else
echo 'Invalid password.';
【问题讨论】:
如果密码以安全方式存储(即:散列),那么您只能依靠客户端代码和浏览器来自动填充密码。从那时起,将表单元素type
属性从 password
更改为 text
?
密码可以使用单向哈希算法安全地存储在数据库中,您可以使用:password_hash()。要验证密码,请使用:password_verify()。
因为我希望用户能够存储密码,然后能够返回并查看密码,因为这里是 password_verify 的示例,此函数仅在以下情况下返回 true 或 false我是对的。在描述中添加了代码 sn-p
如果我没有提到OWASP's password storage 的建议,那我就失职了,特别是在密码存储的上下文中,加密应该只在需要获取原始文件的边缘情况下使用明文密码。曾经甚至有一个专门针对“明文违规者”的网站(不会链接到它),人们会公开羞辱以明文形式存储密码的网站。
【参考方案1】:
我找到了我正在寻找的东西。
很遗憾无法使用密码散列方法,所以我需要使用“openssl_encrypt()”创建我的加密和解密函数,并从 geeksforgeeks.com 找到这篇文章并解释了该过程。
然后我将在 SQL 和 PHP 之间进行修改和加密,以使其按我想要的方式工作。
链接:https://www.geeksforgeeks.org/how-to-encrypt-and-decrypt-a-php-string/
示例代码
<?php
// Store a string into the variable which
// need to be Encrypted
$simple_string = "Welcome to GeeksforGeeks\n";
// Display the original string
echo "Original String: " . $simple_string;
// Store the cipher method
$ciphering = "AES-128-CTR";
// Use OpenSSl Encryption method
$iv_length = openssl_cipher_iv_length($ciphering);
$options = 0;
// Non-NULL Initialization Vector for encryption
$encryption_iv = '1234567891011121';
// Store the encryption key
$encryption_key = "GeeksforGeeks";
// Use openssl_encrypt() function to encrypt the data
$encryption = openssl_encrypt($simple_string, $ciphering,
$encryption_key, $options, $encryption_iv);
// Display the encrypted string
echo "Encrypted String: " . $encryption . "\n";
// Non-NULL Initialization Vector for decryption
$decryption_iv = '1234567891011121';
// Store the decryption key
$decryption_key = "GeeksforGeeks";
// Use openssl_decrypt() function to decrypt the data
$decryption=openssl_decrypt ($encryption, $ciphering,
$decryption_key, $options, $decryption_iv);
// Display the decrypted string
echo "Decrypted String: " . $decryption;
?>
【讨论】:
以上是关于如何使用 PDO 以安全的方式显示和隐藏密码的主要内容,如果未能解决你的问题,请参考以下文章