如果我为我的网站申请SSL证书,我可以在PHP中手动加密提交的表单数据,然后将其存储到数据库吗?
请解释一下ssl的作用?
示例:
网站的访问者输入用户名和密码,我可以使用SSL加密php中的两个数据吗?
像这样。$u_name = verisign_ssl_encryption($_POST['username']);
$pass = verisign_ssl_encryption($_POST['password']);
mysql_query('insert into table (username,password) values ("'.$u_name.'", "'.$pass.'")';
我可以使用相同的SSL来解密从表中检索到的加密数据吗
$row = mysql_fetch_array(mysql_query('select * from table where u_id = 1'));
$user_card_no = verisign_ssl_decrypt($row['card_no']);
echo $user_card_no;
或SSL与此不同?
感谢您的回答!
答案 0 :(得分:1)
是的,您可以这样做,但您无需购买证书即可使用SSL加密。任何自签名证书都可以加密服务器上的数据。
请注意,如果黑客可以访问您的代码,他们可能会访问您的私钥,他们仍然可以访问您的数据库。
此外,即使您加密数据,也应该使用salt散列密码。
请参阅openssl_encrypt()及相关功能。
答案 1 :(得分:1)
SSL代表安全套接字层,基本上为Web浏览器和Web服务器提供安全通道以交换信息。基本上任何使用SSL通过互联网发送的内容都是安全的,但是SSL在服务器收到用户名或密码时并没有任何关系。
基本上,如果您想确保服务器和浏览器之间的连接是安全的,首先要测试是否正在使用SSL(https),如果没有,则重定向到同一页面,但以“https:/”开头/“而不是标准的”http://“
if($_SERVER['HTTPS'] != 'on') {
header('HTTP/1.1 301 Moved Permanently');
header('Location: "https://" ' . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]);
exit();
}
将此代码放在页面顶部,它会重定向用户的浏览器以使用安全连接。使用“exit()”将确保您的脚本不向浏览器发送任何内容,除非($ _SERVER ['HTTPS'] =='on')。
如果您希望在服务器收到用户名/密码后保护用户名/密码,比如添加到数据库,则应使用salted哈希。基本上,盐渍哈希将计算无法反转的哈希码以确定原始密码。这样,如果有人侵入您的数据库,他们将无法窃取任何密码。
盐渍哈希中的“盐”只是一个随机的单词或序列,它使字典攻击变得更加困难。一个简单的函数,它将返回字符串的salted哈希:
function getSaltedHash($string){
$salted = "SaLtStRiNg" . $string;
$hash = md5($salted);
return $hash;
}
此函数的输出将是一个长十六进制字符串(如:23fds327de345ad7839d9799a9b),您应该将此数字作为密码存储在数据库中,当您需要验证密码时,只需计算密码的哈希码即可。用户已使用您存储在数据库中的哈希码发送(使用相同的散列函数)。
如果您需要实际加密要放入数据库的数据(散列与加密不同),那么您需要查看一些PHP的加密包,或者如果verisign为您提供了加密/解密API,然后用它。
在没有任何情况下,如果您尝试设计自己的加密方案,并且绝对不使用混淆(如BASE64或ROT13),这些都无法保护您的数据,并且任何有能力的黑客都能够非常轻松地解码混淆数据
答案 2 :(得分:0)
SSL可以在很多方面使用,但我认为你的意思是你需要ssl支持你的网站。使用apache,您可以使用modssl http://www.modssl.org/执行此操作。
您应该咨询您的托管服务提供商,以便为您的网站配置ssl支持。
答案 3 :(得分:-7)
如果您不想购买SSL证书,请使用base64
加密提交的数据。