ネットの文献を探してみたところ、Mysqliに対応しているphpコードがありませんでした。
php
1<?php 2//ログイン成功php 3 4session_start(); 5$mysqli = new mysqli('127.0.0.1', 'root', 'root', 'users'); 6 7$status = "none"; 8if(isset($_SESSION["username"])) 9 $status = "logged_in"; 10else if(!empty($_POST["username"]) && !empty($_POST["password"])){ 11 $username = $_POST["username"]; 12 $password = $_POST["password"]; 13 $result = $mysqli->query("SELECT password FROM users WHERE username = '$username'"); 14 $status = "failed"; 15 if($result) 16 if($row = $result->fetch_object()) 17 if($row->password == $password){ 18 $status = "ok"; 19 $_SESSION["username"] = $_POST["username"]; 20 } 21} 22 23?> 24 25<!DOCTYPE html> 26<html> 27 <head> 28 <meta charset="UTF-8" /> 29 <title>ログイン</title> 30 </head> 31 <body> 32 <h1>ログイン</h1> 33 <?php if($status == "logged_in"): ?> 34 <p>ログイン済み</p> 35 <?php elseif($status == "ok"): ?> 36 <p>ログイン成功</p> 37 <?php elseif($status == "failed"): ?> 38 <p>ログイン失敗</p> 39 <?php else: ?> 40 <form method="POST" action="login.php"> 41 ユーザ名:<input name="username" /> 42 パスワード:<input name="password" /> 43 <input type="submit" value="ログイン" /> 44 </form> 45 <?php endif; ?> 46 </body> 47</html>
このコードの悪いところは、わかっているのですが
php
1 if($row = $result->fetch_object()) 2 if($row->password == $password){ 3 $status = "ok"; 4 $_SESSION["username"] = $_POST["username"];
この部分でpasswordが入力された値を比較して、あっているかあっていないかを出すように作られているそうです。
なんとかSQLインジェクションが発生するようにコードを変える方法をおしえていただけないでしょうか・・
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/16 08:58
2018/05/16 09:01
2018/05/16 09:26
退会済みユーザー
2018/05/16 10:40