-1

我對我的網站的安全性有一些懷疑,而且我想知道我是否正確地做了這件事。網站保護 - 我做對了嗎?

爲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

我建議你在[Security @ SE](http://security.stackexchange.com/)上詢問,因爲它專注於這樣的問題(關於Web應用程序強化)。 –

+0

@AntonSamsonov不知道這部分,我現在檢查一下。 –

回答

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); 

你的成本因素有點低,如果這是必要的,算法可以在將來被改變。

3.如果($用戶名=== $ db_username & & $密碼=== $ DB_PASSWORD)

這實際上是,如果你真的使用password_hash()函數,隨機的,因爲不可能鹽。相反,你必須與檢查密碼:

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

4.如果($ _ SESSION [ '角色'] == '管理員'){標題( 「位置:管理」);}}

重定向到受保護的頁面是不安全的,沒有人會阻止攻擊者直接調用頁面。每個頁面都必須自行檢查權限,如果登錄的用戶不應該看到該頁面,則可以顯示密碼錶單。

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); 
} 
+2

您是否建議OP加密他的密碼而不是散列它們,或者您是否只是不讀這個問題?無論如何,這個代碼對於標準使用來說也是不安全的。 –