これは一部ですが、最初に接続を行い、次にユーザー名が存在するかどうかを確認してから、データを表に挿入します。 私は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);
}
}
'username'が使用されているかどうかをチェックするデータベースのすべてのユーザーをループするのではなく、' SELECT id FROM users WHERE username = $ username'とし、結果が返された場合、 。 – stealthyninja
ログインシステムの作成に関して "私はPHPについてよく知らない"というのは、ソフトウェア開発の新しい人がログインシステムを書くべきではないからです。ログインシステムを書くことは、よく慣れたソフトウェア開発者だけが本当に理解できるセキュリティ上の落とし穴のあるトピックです。新しいプログラマーはプログラミング言語の基礎を学ぶだけでなく、複雑なセキュリティ問題を同時に理解する必要もあります。新しいプログラマは、自分が何をしているのかを実際に知っている他の人が書いたシステム(例えばBarebones SSO)を使うべきです。 – CubicleSoft