XSSが起こらないようにコードを追加してみよう

muramatsu 69views 更新:2016年6月1日
//ここから追加
<?php header("X-XSS-Protection: 0");?>
<?php
    $logged_in = false;

    // もしログインボタンがおされたならという書述      
    if (isset($_POST["login"])) {
//ここまで
        $username = $_POST["username"];
        $password = $_POST["password"];

//サーバーに接続する
 try {      
            $dbh = new PDO('mysql:dbname=form;host=localhost', 'root', '');
        } 
//例外(つまりつながらなかった時にどういう処理をするかを記述する
 catch (PDOException $e) {
            exit('データベースに接続できませんでした'.$e->getMessage());
        }
        $sql = "SELECT * FROM user_info WHERE name='$username' AND password='$password'";
        $stmt = $dbh->prepare($sql);
        $stmt->execute();
        $data = $stmt->fetch(PDO::FETCH_ASSOC);
        if (!empty($data)) {
            $logged_in = true;
            echo "ログイン成功";
        } else {
            $logged_in = false;
            echo "ログイン失敗";
        }
    }
?>
//ここまで
<!doctype html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>login form</title>
  </head>
  <body>
//入力された情報を現在のスクリプトパス$_SERVER['SCRIPT_NAME']で処理してる//
//入力された情報をPOSTメソッドでサーバーに送り$_POSTという変数に格納させる//
<form id="loginForm" name="loginForm" action="<?php print($_SERVER['SCRIPT_NAME']); ?>" method="POST">
//ここまで
//入力送信フォーム作成コード
 <form id="loginForm" name="loginForm" action="#" method="POST">
          <legend>ログインフォーム</legend>
//input type="text" にすることによって1行テキストボックス作成
          <label for="username">ユーザ名</label>
          <input type="text" id="username" name="username" value="" />
          <br />
//input type="password" にすることによってパスワード入力ボックス作成
          <label for="password">パスワード</label>
          <input type="password" id="password" name="password" value="" />
          <br />
//input type="submit" によって送信ボタンを作成
          <input type="submit" id="login" name="login" value="ログイン" />
      </form>
//ログインが成功したならというコード
 <?php if ($logged_in): ?>
   <?php echo "こんにちは".$_POST["username"]."さん"?>
//["username"]に格納された変数が空の配列を返している(つまり何もない状態ならecho 以下を表示させるというコード)
 <?php elseif (!empty($_POST["username"])):?>
    <?php echo htmlspecialchars($_POST["username"],ENT_COMPAT,UTF-8)."さんが見つかりませんでした。入力情報を確認してください"?>
        <?php endif;?>


var dumpで可視化してしまうとエラーが起きるためvar dumpは消した

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません