0

このコードは古い接続方法であり、SQLインジェクションの影響を受けやすいと言われています。どうすれば安全にできますか?

これは、ユーザーのデータベースをチェックし、アカウントを持っていない場合は新しいユーザーを追加するために使用するコードです。mysqliを試しましたが、うまくいかなかったので、安全にする方法がわかるまで、今はこれに戻らなければなりませんでした。

<?php
// Connect to the database(host, username, password)
$con = mysql_connect('localhost','user1','pass1');
if (!$con)
{
    echo "Failed to make connection.";
    exit;
}
// Select the database. Enter the name of your database (not the same as the table name)
$db = mysql_select_db('db1');
if (!$db)
{
    echo "Failed to select db.";
    exit;
}
// $_POST['username'] and $_POST['password'] are the param names we sent in our click event in login.js
$username = $_POST['username'];
$password = $_POST['password'];
// Select eveything from the users table where username field == the username we posted and password field == the password we posted
$sql = "SELECT * FROM users WHERE username = '" . $username . "' AND password = '" . $password . "'";
$query = mysql_query($sql);
// If we find a match, create an array of data, json_encode it and echo it out
if (mysql_num_rows($query) > 0)
{
    $row = mysql_fetch_array($query);
    $response = array(
        'logged' => true,
        'name' => $row['name'],
        'email' => $row['email']
    );
    echo json_encode($response);
}
else
{
    // Else the username and/or password was invalid! Create an array, json_encode it and echo it out
    $response = array(
        'logged' => false,
        'message' => 'Invalid Username and/or Password'
    );
    echo json_encode($response);
}
?>
4

1 に答える 1

1

ユーザーからのデータはすべてmysql_real_escape_string()を介して渡される必要があります。この関数の使用の詳細については、以下のURLを参照してください。それは非常に重要です。

http://php.net/manual/en/function.mysql-real-escape-string.php

PHPを使用したSQLインジェクションについてもう少し詳しく説明します。

http://php.net/manual/en/security.database.sql-injection.php

MySQLi情報(mysql_real_escape_string以外の別の手法):

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

編集:わかりました、私は認めます、私はちょっと古い学校です。MySQLiは間違いなく行く方法のようです。私はPHP3とPHP4の開発に精通しています。可能であれば、最後のリンクを使用してデータアクセスコードを再実装します。

于 2012-09-29T01:01:00.580 に答える