1
 1. how to work php sql injection and use in site ?

私のサイトのログインプロセスは、ユーザー名とパスワードなしで誰でも簡単にログインできます.plzは安全なログインプロセスの方法を説明しています.

例 :

$logindetail = "select * from tablename where username = '".$_REQUEST['username']."' and password = '".$_REQUEST['password']."' ";

$sqlrun = mysql_query($logindetail);

$recordcount = mysql_num_rows($sqlrun); 

このログイン プロセスでは、SQL インジェクションはどのように使用されますか?

4

4 に答える 4

3

mysqliまたはPDO preprared ステートメントを使用してクエリを実行します。mysql は非推奨です。
このようなもの:-

<?php
     $con = new mysqli('host','user','pass','db');
     if(!$con)
       die();
     $stmt = $con->prepare("select * from tablename where username = ? and password =?");
     $stmt->bind_param('ss',$_REQUEST['username'],$_REQUEST['password']);
     $stmt->execute();
     $stmt->close();

これは、SQL インジェクションを停止するより安全な方法です。詳しくはこちらから

于 2013-10-18T05:37:34.387 に答える
3

SQL インジェクションを防ぐ方法を誰かに説明してもらいたいのか、それとも誰かが SQL インジェクションを使ってあなたのサイトに侵入する可能性があるのか​​ は明らかではありません。

SQL インジェクションを防ぐには、パラメーター化されたクエリを使用します。これは、この質問ですでに十分に説明されています: PHP で SQL インジェクションを防ぐにはどうすればよいですか?

あなたのサイトが SQL インジェクションに対して脆弱であることに誰かが気付いた場合、ユーザー名ボックスにこれを入力することで、既知のユーザー名でサイトにログオンできます。

admin' OR 1=1 -- 

これにより、データベース サーバーで実行される SQL が次のようになります。

"select * from tablename where username = 'admin' OR 1=1 -- and password = '' "

OR 1=1true と評価さ--れ、残りの SQL 文字列はコメントアウトされ、パスワード チェックが回避されます。

これは小さな例であると想定しているため、パスワードのハッシュ化については触れません。

于 2013-10-18T05:33:21.297 に答える
1

最初の行を次のように変更します。

$logindetail = "select * from tablename where username = '".mysql_real_escape_string($_REQUEST['username'])."' and password = '".mysql_real_escape_string($_REQUEST['password'])."' ";
于 2013-10-18T05:24:11.433 に答える
1

準備済みステートメントとパラメーター化されたクエリを使用します。

msqli http://php.net/manual/en/book.mysqli.phpを使用してこれを実現できます

クイックチュートリアル。http://www.phphaven.com/article.php?id=65

サンプルコード

<?php


// CONNECT TO THE DATABASE
    $DB_NAME = 'DATABASE_NAME';
    $DB_HOST = 'DATABASE_HOST';
    $DB_USER = 'DATABASE_USER';
    $DB_PASS = 'DATABASE_PASSWORD';

    $mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);

    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

// A QUICK QUERY ON A FAKE USER TABLE
    $query = "SELECT * FROM `users` WHERE `status`='bonkers'";
    $result = $mysqli->query($query) or die($mysqli->error.__LINE__);

// GOING THROUGH THE DATA
    if($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            echo stripslashes($row['username']);    
        }
    }
    else {
        echo 'NO RESULTS';  
    }

// CLOSE CONNECTION
    mysqli_close($mysqli);


?>
于 2013-10-18T05:33:24.427 に答える