网站保护 - 我做得对吗?

时间:2016-12-17 11:37:19

标签: php security encryption password-protection password-encryption

我对自己在网站上的安全性有所怀疑,而且我想知道我是否正确地做了这件事。

对于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');

  

我确实意识到这种联系很脆弱,因为没有   密码

我想知道是否有更好的方法可以有效和轻松地执行这些保护步骤,甚至使其更强大。

2 个答案:

答案 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 );
}