网站保护 - 我做得对吗?

Website Protection- Am i doing it right?

我对我网站的安全性有一些疑问,我想知道我是否正确地做了。

对于 POST\GET 请求我总是使用 mysqli_real_escape_string($connection,nd_parametter);

对于密码加密,我使用 password_hash('$password', PASSWORD_BCRYPT, array('salt' == 9));

People told me that BCRYPT is better than SHA for Website passwords.

对于登录验证,我使用 if($username === $db_username && $password === $db_password){};

对于页面可访问性检查,我使用

if($_SESSION['role'] == 'Admin'){header("Location: admin");}}
    else{header("Location: index");}

用于数据库连接mysqli_connect(localhost,root,,'database');

I do realize that this connection is vulnerable since there is no password

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

试试这个类型

$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 ) ) ), "[=10=]");
    return( $decodestring );
}

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。如果($用户名=== $db_username && $密码=== $db_password)

如果你真的使用 password_hash() 函数,这实际上是不可能的,因为随机盐。相反,您必须检查密码:

$isPasswordCorrect = password_verify($password, $db_password);

4。如果($_SESSION['role'] == 'Admin'){header("Location: admin");}}

重定向到受保护的页面是不安全的,没有人能阻止攻击者直接调用该页面。每个页面都必须自己检查权限,如果登录用户不应该看到该页面,那么您可以显示密码表单。