-2

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

これは私のコードです

$user_name = "admin";
$password = "123456";
$database = "jbit";
$server = "localhost";
$id = $_POST['id'];
$db_handle = mysql_connect($server, $user_name, $password);
$db_found = mysql_select_db($database, $db_handle);

if ($db_found) {

$SQL = "SELECT * FROM jbit WHERE htno='$id'";
$result = mysql_query($SQL);
$sum = "SELECT htno, SUM(tm) AS tech, ROUND(SUM(tm)/7.5, 2) AS divi, SUM(credits) AS cred , SUM(CASE WHEN credits <= 0 THEN 1 ELSE 0 END) AS log,
SUM(CASE WHEN credits > 0 THEN 1 ELSE 0 END) AS pass, SUM(CASE WHEN em >= 0 THEN 1 ELSE 0 END) AS atm, SUM(CASE WHEN em >= -2 THEN 1 ELSE 0 END) AS tot
FROM jbit WHERE htno='$id'";
$result1 = mysql_query($sum);

SQLインジェクションを回避できるように、このコードを保護するのを手伝ってください

4

3 に答える 3

3

問題を解決するための努力がほとんど示されていないため、人々はあなたに反対票を投じているようです。インジェクション攻撃から安全になりたい場合は、プリペアド ステートメントで mysqli または PDO API を使用する必要があります。MySQL API は常にインジェクションの影響を受けやすいため、使用をお勧めしません。

アプリの初期段階にあるようですので、MySQLiPDOなどのより優れた API を使用するようにリファクタリングすることをお勧めします

于 2012-09-23T06:53:40.370 に答える
1

より良いアプローチは

  1. mysqli_query()
  2. PDO::クエリ()

mysql_* 以下の機能を使用できますが、コミュニティによってメンテナンスおよび更新が行われなくなったため、機能を使用しないことをお勧めします。

それはあなたの知識だけのためです

 $id = mysql_prep($_POST['id']);


function mysql_prep($value)
{
    $magic_quotes_active = get_magic_quotes_gpc();
    $new_enough_php = function_exists("mysql_real_escape_string"); // i.e. PHP >= v4.3.0
    if ($new_enough_php) { // PHP v4.3.0 or higher
        // undo any magic quote effects so mysql_real_escape_string can do the work
        if ($magic_quotes_active) {
            $value = stripslashes($value);
        }
        $value = mysql_real_escape_string($value);
    } else { // before PHP v4.3.0
        // if magic quotes aren't already on then add slashes manually
        if (!$magic_quotes_active) {
            $value = addslashes($value);
        }
        // if magic quotes are active, then the slashes already exist
    }
    return  $value ;
}

よく読んだ

PHPでSQLインジェクションを防ぐ最善の方法は?

于 2012-09-23T06:48:39.903 に答える
-1
$id = mysqli_real_escape_string(($_POST['id']));

すべての入力を mysql_real_escape_sting でフィルタリングします。

これが機能しない場合は、非推奨の代わりに使用できる mysql_real_escape を試してください。

于 2012-09-23T06:50:40.093 に答える