質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1201閲覧

「セキュリティーゲーム作成。クリアしたら~の部分をどうしたらよいか悩んでいる」

kazoogon

総合スコア281

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/06/16 23:10

ただ今簡単なセキュリティーゲームのようなアプリを作っています。
現段階では脆弱性のあるコードで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; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

それ以前に、こういったアプリでは、想定した内容以外の箇所に脆弱性があってはいけないので、徹底的に潰しておかないとダメでは?
ざっと見たところだけでも、
・username もダメでしょ
・csrf 対策も無い
とあるので、ユーザが想定外の行動を取ると思います。

サーバ側も連続アクセスの制限とかしておかないと、辞書攻撃で落ちるとかありそうです。

投稿2017/06/17 01:06

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

侵入試行体験アプリならば一般的な会員制サイトを模して、ログイン後のページに次のステージへのリンクなりボタンを置くのがよいと思います。

cont.php でログイン処理(username, password照合)と、ログインページの描写(view.php呼び出し)を行っていますが、ここにログイン成功時に成功ページの view を表示する条件分けを入れるのがベターだと思います。

それとも "次のステージへ" のリンクを非表示にして(でもソースでは丸見え)、それも脆弱性の教材としたいという話でしょうか?

投稿2017/06/17 01:00

miyahan

総合スコア3095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazoogon

2017/06/17 06:31

回答ありがとうございます。 提案していただいた、成功時に成功ページのviewを表示させる方法でいこうと思います。たすかりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問