ただ今簡単なセキュリティーゲームのようなアプリを作っています。
現段階では脆弱性のあるコードでusernameとpaswwordを入力してもらう欄を作り、ゲームする人にはusernameは教えた状態でパスワードをどうにか入力してその人の情報を取って来れたら次のステージに行ける(「クリアおめでとう!次のステージへ」というボタンが出てくる)というようにしようと思っています。
分かる人にはすぐわかると思いますが、これはSQLインジェクションで
hoge' or 'A'='A
などと入力すると情報が取ってこれます。
ここで質問ですが、この場合の「もしクリアできたら(=もし情報を取ってこれたら)、ボタンが出現するのコードをどうすればよいか迷っています。
詳細は↓のコードの中に書きました、よろしくお願いします。
cont.php
<?php //sql injection require_once '../security_model.php'; $link= db_connect(); $username = ""; $password = ""; if($hide === "login"){ $username = get_post('username'); $password = get_post('password'); if((login($link,$username,$password)) === FALSE){ $error_for_me[]="login SELECT失敗"; } } include_once 'view.php';
view.php(パスワードは入力する人がわかるようあえてtextタイプ)
<!DOCTYPE html> <html> <meta charset="utf-8"> <head> <title>SQL injection</title> </head> <body> <h1>SQLインジェクション</h1> <form action="cont.php" method="POST"> <input type="text" value="" name="username" placeholder="username"> <input type="text" value="" name="password" placeholder="password"> <input type="submit" name="login" value="show data!"> </form> <table border="1"> <tr> <th>名前</th> <th>歳</th> <th>特徴</th> </tr> <tr> <td><?php echo $login['username'] ?></td> <td><?php echo $login['age'] ?></td> <td><?php echo $login['feature']; ?></td> </tr> </table> </body>
security_model.php(DB部分の関数は省略)
function get_post($name){ if(isset($_POST[$name])===TRUE){ return $_POST[$name]; }else{ return FALSE; } } function login($link,$username,$password){ if($username===""){ $error[]="please fill in username"; }else if($password === ""){ $error[]="please fill in password"; } if(count($error === 0)){ $query='SELECT * FROM user WHERE password = \''.$password.'\' AND username = \''.$username.'\''; return select($link,$query); }else{ $error[]="*failed login".$query; return FALSE; } } function select($link,$query){ global $error_for_me; if($login_button = mysqli_query($link,$query)){ if(($login_gift = mysqli_fetch_assoc($login_button))!==FALSE){ return $login_gift; //**たぶんここになんらかの処理を書くと思うのですが //**例えばjqueryなどでdisplay:none;に設定したボタンを見えるようにすることは可能なのか? またこれとは全く違う発想が何かあるのか?? }else{ return FALSE; } }else{ return FALSE; } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。