質問させてください。
今phpで掲示板を作っていまして、投稿した本人だけに表示される削除ボタンを配置したいと考えております。
とあるサイトに、本人確認にはクッキーとIPアドレスをチェックすることで実現できるとあり、そちらを参考に見よう見まねで作成しました。
イメージしているものとしましてはこちらのような感じです。
IPアドレスは下何ケタが変化するらしく、上位6ケタを照合するとあったのですが、どうもこの「IPアドレスの上位6ケタが一致」という部分が引っかかってまして、これで本当に本人証明できているのだろうかと不安です。
以下が作成したコードなのですが、こちらできちんと本人確認できていますでしょうか・・・
他人が削除できてしまう状況は避けたいので、もし何か間違っている箇所がありましたらご教授いただけますと助かります。
よろしくお願いいたします。
php
1<?php 2 3 4// jsonファイルを開く 5$fp = fopen('data.json', 'c+b'); 6 7// JSONファイルを読み取り配列に変換 8$rows = (array)json_decode(stream_get_contents($fp), true); 9 10// トークンがあれば本人確認 11if (isset($_COOKIE['token'])) { 12 $t = $_COOKIE['token']; 13 checkIdentity($rows, $t); 14} 15 16/* 本人確認処理 17------------------------------------------------------------------------- */ 18function checkIdentity($rows, $token) { 19 // IPアドレスの取得 20 $ip_user = substr($_SERVER["REMOTE_ADDR"], 0, 6); // IPアドレスの上位6桁を取得 21 22 // jsonファイルの中にIPとトークンがあるか検索 23 foreach ($rows as $row) { 24 $ip_json = substr($row['ipaddress'], 0, 6); 25 26 // 両方一致したら本人 27 if ($token === $row['token'] && $ip_user === $ip_json) { 28 echo '本人'; 29 } else { 30 echo '他人'; 31 } 32 } 33} 34 35/* 投稿処理 36------------------------------------------------------------------------- */ 37// 投稿と同時にIPアドレスを取得&クッキーをセットしてjsonに書き込む 38if ($_SERVER['REQUEST_METHOD'] === 'POST') { 39 // IPアドレスの取得 40 $ipaddress = $_SERVER["REMOTE_ADDR"]; 41 42 // ランダムでユニークな文字列を生成 43 $token = sha1(uniqid(rand(), true)); 44 45 // クッキーにトークンをセット 46 setcookie('token', $token, time()+60*60*3); 47 48 // jsonに追加する 49 $rows[] = ['ipaddress' => $ipaddress, 'token' => $token]; 50 51 rewind($fp); 52 fwrite($fp, json_encode($rows, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); 53 ftruncate($fp, ftell($fp)); 54} 55 56// ファイルを閉じる 57fclose($fp); 58 59 60?> 61<!DOCTYPE html> 62<html lang="ja"> 63<head> 64<meta charset="utf-8"> 65<title></title> 66</head> 67<body> 68 69 70<form method="post" action=""> 71 <input type="submit" value="投稿"> 72</form> 73 74 75</body> 76</html>
jsonファイルはこのようになっています。(111となっているはテストのためです。)
json
1[ 2 { 3 "ipaddress": "111", 4 "token": "610b2f57273f9ddad8340a745205ac939c0b18fb" 5 }, 6 { 7 "ipaddress": "222", 8 "token": "7a2fc55acb113b8c2216f138c237627bcd4ba1ac" 9 }, 10 { 11 "ipaddress": "333", 12 "token": "46feea3ea9814f6b8662c1262f59aaca7a345eed" 13 }, 14 { 15 "ipaddress": "444", 16 "token": "d2f4cf49aaa984e82d352d1cce864c62d9fbfe1c" 17 }, 18 { 19 "ipaddress": "192.168.33.1", 20 "token": "2fc29f804b3e1d57701897faf49d57e2bff5101b" 21 } 22]
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/02/24 11:23
2019/02/24 11:34