這只是它的一部分,但它首先進行連接,然後檢查用戶名是否存在,然後將數據插入表中。 我對PHP並不是很瞭解,所以沒有必要對我進行攻擊。試圖在這裏學習,我想知道我是否在正確的軌道上。此PHP代碼對於登錄系統看起來是否安全?
require("constants.php");
try {
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $dbconnect, $dbpass);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
echo "sorry, something happened. try going back and try again.";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
function checkName(){
$STH = $DBH->query('SELECT username FROM users WHERE username = $username');
$STH->setFetchMode(PDO::FETCH_OBJ);
while($row = $STH->fetch()) {
if($username != $row->username){
$check = 1;
}
else{
$check = 0;
}
return $check;
}
function createSalt()
{
$string = md5(uniqid(rand(), true));
return substr($string, 0, 3);
}
function register(){
$check = checkName();
if($check == 1){
$salt = createSalt();
$hash = sha1($salt . $hash);
$data = array($username, $hash, $salt, $ip);
$STH = $DBH->("INSERT INTO users (username, password, salt, ip) values (?, ?, ?)");
$STH->execute($data);
}
}
而不是通過數據庫中的所有用戶循環檢查是否採取'用戶名',我只是'SELECT ID FROM用戶WHERE用戶名= $用戶名',如果返回結果,你知道它已被採取。 – stealthyninja 2010-12-15 05:47:51
關於編寫登錄系統,「我對PHP的瞭解不多」,這就是爲什麼那些新開發的軟件不應該編寫登錄系統的原因。編寫登錄系統是一個充滿安全隱患的話題,只有一位經驗豐富的軟件開發人員才能真正理解。新程序員不僅要學習編程語言的基礎知識,還必須同時理解複雜的安全問題。新程序員應該使用別人寫的系統,他們實際上知道自己在做什麼(例如Barebones SSO)。 – CubicleSoft 2015-05-05 14:03:22