3

PDO または mysqli を (何らかの理由で) 使用できない場合、このメソッドは INSERT および SELECT に対して安全ですか?

<?php

  if (!empty($_POST[id]) && !empty($_POST[name])) {
    require_once ( 'config.php' );

    // SAFE INTVAL ID
    $id = intval($_POST[id]);

    $connect = mysql_connect("$server", "$user", "$password")
    OR die(mysql_error());
    mysql_select_db("$database", $connect);

    // ESCAPING NAME
    $name = mysql_real_escape_string($_POST[name]);

    $query = "INSERT INTO table (id, name) VALUES ('$id', '$name')";
    $result = mysql_query($query, $connect);

    if (!$result) { echo 'success'; } else { echo 'fail'; }
  }

?>

何度も mysql_query を使用しないことを読んだことがありますが、注意して時間内に逃げても危険ですか?

4

3 に答える 3

3

私の知る限り、あなたの質問は完全に問題ありません。あなたはSQLをエスケープしています

mysql_real_escape_string($_POST[name])

これにより、コードのセキュリティが強化されます。唯一の提案はその使用です:

$_POST['name']

それ以外の

$_POST[name]

PHP警告が生成されるため。

ありがとう。

于 2013-01-10T11:36:05.743 に答える
1

他の回答に追加するには、クエリを利用できないため、「安全」です。ただし、注意すべき点の1つは、ユーザーがIDを提供することを信頼していることです(ここでは主キーであると想定しています)。もちろん、これはユーザーが他のレコードを上書きできることを意味します。

より良い方法は、クエリからid列(およびその値)を省略し、テーブルを作成するときに列をAUTO_INCREMENTとしてマークすることです。クエリから省略された値はデフォルト値になります。この場合、通常idは+1の最後の値になります。

于 2013-01-10T11:46:49.400 に答える
1

複雑すぎて(?) 使えないといっても、ちょっと調べて使い方を理解したほうがいいですよね。一度行ったら、戻りたくなくなることを約束します!:) PDO / MySQLi を使用することをお勧めします。なぜなら、PHP 5.5 では MySQL が減価償却されており、E_DEPRECIATED 通知が表示されるからです。

MySQLi または PDO を使用したプリペアド ステートメントは、文字列をエスケープする必要がないことを意味します。単に各変数を で参照し、?後で ? のデータ型を指定します。sたとえば、文字列です。

その場合、使用する必要はありませんmysql_real_escape_string()。あなたのコードの将来を保証します!:)

于 2013-01-10T14:07:47.643 に答える