-3

重複の可能性:
PHP で SQL インジェクションを防ぐ最善の方法は?

これは私が PHP で行った簡単な登録です。私はPHPが初めてなので、本当に安全にする方法を知りたいだけなので、例も役立ちます。全体として、リソースやガイダンスは素晴らしいものです。

<?php

$email = $_POST["email"];
$password = $_POST["password"];
$fname = $_POST["first_name"];
$lname = $_POST["last_name"];

$db = "mydatabase";
$connect = mysql_connect("localhost","root","");
if(!$connect){
    die('Could not connect.');  
}

$query = "INSERT INTO users (id, email, password, first_name, last_name) VALUES (DEFAULT, '".$email."', '".$password."', '".$fname."', '".$lname."')";

mysql_select_db($db, $connect);

if(!mysql_query($query)){
    echo 'Failed: '.mysql_error();
}
else{
    echo 'You have registered.';
}

mysql_close($connect);

?>

これがレジスター入力フォームです

<html>
<head>
</html>
<body>

<form action="new_user_db.php" method="POST">
    <input type="text" name="first_name" placeholder="First Name" required><br>
    <input type="text" name="last_name" placeholder="Last Name" required><br>
    <input type="email" name="email" placeholder="E-mail" required><br>
    <input type="password" name="password" placeholder="Password" required><br>
    <input type="submit" value="Register">
</form>

</body>
</html>

フィードバックをお寄せいただきありがとうございます。

4

2 に答える 2

2

セキュリティ上の問題:

  1. MySQLi / PDOを使用します。mysql_ 関数は非推奨です。

  2. rootアカウントを使用して mysql クエリを実行するのをやめます。必要最小限の権限を持つ新しいデータベース ユーザーを作成する

  3. 最後に (PHP とは関係ありません)、SSL と、クライアントからサーバーへの資格情報の移動の保護について調べます。

また、セキュリティリスクではありませんが...

それを使用するすべてのPHP ファイルに資格情報を含めることは、悪い習慣です。接続を確立したいときはいつでも、それを別の PHPに入れ、include / requireしてください。これにより、データベース サーバー/ユーザー/パスワードを変更するときにいくつかの変更を行う必要がなくなります。

于 2012-10-18T21:31:22.780 に答える
1

プリペアド ステートメントを使用する

$db = mysqli_connect($dbserver, $dbuser, $dbpass,$dbname);

$sql = "insert into mytable (mycol1, mycol2) values (?,?)";

$statement = $db->prepare($sql);

$statement -> bindparam("ss",$myval1, $myval2)'

mysqli_stmt_execute(#statement);
于 2012-10-18T21:30:47.883 に答える