-1

重複の可能性:
PHP で SQL インジェクションを停止する最良の方法

ログイン スクリプトがハッキングされています (ハッキングはログインをバイパスし、メンバー セクションに侵入する可能性があります)。

ここに私のログインがあります:

<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
<table width="450px"><tr><td>
<?php 
if(isset($_POST['login']))
{   

$user= mysql_real_escape_string($_POST['username']);
$user22 = strip_tags($user);
$pass= mysql_real_escape_string($_POST['password']);
$pass2 = strip_tags($pass);
$pass1 = md5($pass2);

$mod = 1 ;

$sql = "SELECT * FROM users WHERE username='".$user22."' AND password = '".$pass1."'";
$result = mysql_query($sql) or die(mysql_error());
$battle_get = mysql_fetch_array($result);

if ( $battle_get['mod'] == 1 ) {
                $month = time() + 3600*24*30;
                $hour = time() + 3600*1*1;
                $LastLogin = date('l, M d, Y H:i:s');
                $_SESSION['user'] = $_POST['username'];
                setcookie("save_user", stripslashes(htmlentities($user22)), $hour); 
                setcookie("save_pass", stripslashes(htmlentities($user22)), $month);
                $username = stripslashes(htmlentities($user22));
                $result = mysql_query("UPDATE users SET LastLogin = '$LastLogin' WHERE username='$username'");
                header("location: home.php"); 
}

}
?></td></tr></table>
<ul><li class="topper" style="width:410px;"></li>
<table>
<tr><td>Username</td><td><input type="text" name="username" id="textfield"></td></tr>
<tr><td>Password</td><td><input type="password" name="password" id="textfield"></td></tr>
</table><li class="bottomer" style="width:410px;"></li></ul>
<table><tr><td><input type="submit" name="login" value="login" id="button"></td></tr></table>
</form>

そして、私の設定ファイルには、ユーザーがログインごとにIPを変更するのを止めるこのコードがあります.

if(isset($_SESSION['last_ip']) == false){
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR'];
    }

    if ($_SESSION['last_ip'] !== $_SERVER['REMOTE_ADDR']){

    session_unset();
    session_destroy();

    }

if(empty($_SESSION['user'])){
         echo"Please login into the rpg first" ;
         die;
}

すべてのページに構成ファイル (上記のコード) を含めると、空の場合、ユーザーはサイトの横で表示できなくなります... ハッカーは、SQL を使用してアクセスしていると言っています.....

私は何を間違っていますか?

4

5 に答える 5

2

彼は SQL インジェクションを使用しています。彼は「username」の $_POST を次のように変更しています

"username; OR 1=1"

1=1 は「真」であるため、彼を入れます。あなたは「;」から保護されていません。

SQL インジェクションと自分自身を保護する方法に関する情報がたくさんあります。

于 2012-05-25T18:38:17.717 に答える
2

この線

$sql = "SELECT * FROM users WHERE username='".$user22."' AND password = '".$pass1."'";

は危険です (SQL インジェクション) PdoMySQL

http://www.php.net/manual/en/ref.pdo-mysql.phpを参照してください。

于 2012-05-25T18:38:25.907 に答える
0

この投稿をご覧ください。

彼はSQLインジェクションについて説明し、mysql_real_escape_string();

于 2012-05-25T18:44:13.677 に答える
0

Sql Injectionを調べて、ここで例を見てください: http://www.unixwiz.net/techtips/sql-injection.html

特定のSQLは次のようになります。

$sql = "SELECT * FROM users WHERE username='".$user22."' AND password = '".$pass1."'";

これは、SQL インジェクションの機が熟しています。

次のいくつかを見てください。

これらは、php で sql インジェクション攻撃を防ぐ方法を検索する際の上位リンクのほんの一部です。

于 2012-05-25T18:37:28.793 に答える
0

ここで SQL インジェクションについて少し読んでください。

于 2012-05-25T18:38:03.583 に答える