我对自己在网站上的安全性有所怀疑,而且我想知道我是否正确地做了这件事。
对于POST \ GET请求我总是使用mysqli_real_escape_string($connection,$2nd_parametter);
我使用password_hash('$password', PASSWORD_BCRYPT, array('salt' == 9));
人们告诉我,对于网站密码,BCRYPT优于SHA。
登录验证我使用if($username === $db_username && $password === $db_password){};
用于页面辅助功能检查我使用
if($_SESSION['role'] == 'Admin'){header("Location: admin");}}
else{header("Location: index");}
用于数据库连接mysqli_connect(localhost,root,,'database');
我确实意识到这种联系很脆弱,因为没有 密码
我想知道是否有更好的方法可以有效和轻松地执行这些保护步骤,甚至使其更强大。
答案 0 :(得分:2)
<强> 1。 mysqli_real_escape_string()强>
转义函数用于将用户输入插入SQL查询,而不是用于GET / POST请求。有一种更好,更舒适的方式,您可以使用prepared statements来防止SQL注入。要转义HTML的用户输入,函数htmlspecialchars()
更适合。
<强> 2。 password_hash()强>
确实应该使用password_hash()函数,尽管如此编写它会更安全,更具前瞻性:
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);
您的成本因素有点低,PASSWORD_DEFAULT
如果有必要,可以在以后更改算法。
第3。 if($ username === $ db_username&amp;&amp; $ password === $ db_password)
如果你真的使用了password_hash()函数,那实际上是不可能的,因为随机盐。相反,您必须使用以下方法检查密码:
$isPasswordCorrect = password_verify($password, $db_password);
<强> 4。 if($ _ SESSION ['role'] =='Admin'){header(“Location:admin”);}}
重定向到受保护的页面是不安全的,没有人阻止攻击者直接调用该页面。每个页面都必须自行检查权限,如果登录用户不应该看到该页面,则可以显示密码表单。
答案 1 :(得分:0)
试试这种类型
$input = "Yourpasswordtext";
$encrypted = encryptionIt( $input );
$decrypted = decryptionIt( $encrypted );
echo $encrypted . '<br />' . $decrypted;
function encryptionIt( $q ) {
$key = 'qJB0rGtIn5UB1xG03efyCp';
$encodestring = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $key ), $q, MCRYPT_MODE_CBC, md5( md5( $key ) ) ) );
return( $encodestring );
}
function decryptionIt( $q ) {
$key = 'qJB0rGtIn5UB1xG03efyCp';
$decodestring = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $key ), base64_decode( $q ), MCRYPT_MODE_CBC, md5( md5( $key ) ) ), "\0");
return( $decodestring );
}