0

SQLインジェクションに対してオープンなこのようなコードがあります。ハッキングされましたが、修正しました。このコードをハッキングするために必要な入力 (ユーザー名とパスワード) を知りたいだけです。つまり入力しても

username = something' OR 'x'='x

次に、ユーザー名に関係なく、テーブル内の最初のユーザーのパスワードを取得できます。ただし、内部では、ifこのパスワードが正しいかどうかを確認します。私は、パスワードが非常に簡単 (と同じくらい簡単123456) で、ハッカーが辞書から力ずくで作成したと想定しています。ただし、パスワードのブルートフォース以外のインジェクションを使用してこのコードをハッキングする別の方法があるかどうか疑問に思っています。

<?php
$username=$_POST['username'];
$password=$_POST['password'];

$result=runQuery("SELECT password FROM tbl_users WHERE username='".$username."''");
$row=mysql_fetch_array($result);

if($row['password']==$password){
    -- do sth... create a cookie etc..
}
else{
    --go to another page...
}
?>
4

3 に答える 3

3

PDO ライブラリで変数バインディングを使用します。

于 2013-09-16T19:41:36.507 に答える
3

ハッカーが値を渡す場合:

$username = "' OR * OR '"

クエリは次のようになります。

SELECT password FROM tbl_users WHERE username='' OR * OR '';- これは任意のユーザーを選択します。

しかし、ハッカーは次のことができます。

$username = "'; DELETE * FROM tbl_users WHERE username = * OR '";

SELECT password FROM tbl_users WHERE username = ''; DELETE * FROM tbl_users WHERE username = * OR '';

またはUPDATE任意のパスワードを変更することができます。

安全性?mysql_real_escape_stringまたはpreg_match("/^[a-zA-Z0-9]{3,15}$/", $username)、たとえば。

于 2013-09-16T19:35:56.057 に答える
-1

ブール ブラインドまたはタイム ブラインド インジェクション ハッカーを使用すると、すべてのデータベース構造を取得できます。

例:

username = 'admin' and if(1=1, sleep(10), 5222) #

このクエリは、返されて条件がtrueorであることを確認するのに 10 秒かかりますfalse。information_schema と SQL 条件テストを使用して、すべてのデータベース情報を取得できます。

于 2013-11-21T16:20:58.860 に答える