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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

659閲覧

いいね数をリアルタイムで反映して表示させるためにはどうすればよいでしょうか?

homepage-site

総合スコア54

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2025/01/08 14:25

編集2025/01/08 14:45

実現したいこと

Q&A掲示板の質問にいいね機能を実装したいです。

発生している問題・分からないこと

参考サイトを見ながらコードを書き換えたのですが、表示部分がPHPで書かれており、カウントをカラムに集計して一定期間でカウントしているのではないかと思い、表示部分を Javascript に変更すべきか悩んでおります。

ログイン制ではないためPOSTデータでは、質問ID と UUID(IPアドレス)を送信するように考えたのですが、セキュリティを考えると危険でしょうか?

該当のソースコード

PHP

1<!-- いいねのクリックイベント --> 2<script> 3 let nongood = document.getElementById("nongood"); 4 let kazu = code.length; 5 //let kazu = count(code); 6 7 kazu.forEach(code.length => { 8 // +[]は0 9 let good = +code[i]; 10 let iine = +code[i]; 11 good = document.getElementById("good" + code[i]); 12 iine = document.getElementById("iine" + code[i]); 13 //いいねボタンをクリックした時にイベントが発生 14 good.addEventListener("click", () => { 15 //good.classList.toggle('クラス名'); 16 //指定された文字列がリスト内にあるかどうかを示す 17 if (good.classList.contains('on')) { 18 //要素を削除 19 good.classList.remove('on'); 20 //要素を追加 21 good.classList.add('off'); 22 //取り消しでいいね数を-1して出力 23 iine.textContent = g_iine[i] - 1; 24 g_iine[i] = g_iine[i] - 1; 25 } else { 26 good.classList.remove('off'); 27 good.classList.add('on'); 28 //いいねで総数+1 29 iine.textContent = g_iine[i] + 1; 30 g_iine[i] = g_iine[i] + 1; 31 } 32 33 //FormData オブジェクトをインスタンス化したら append() メソッドを呼び出すことでフィールドに追加することができる 34 formData.append("action", "like_dislike_button"); 35 //フォームの入力値を送信 36 const require = { 37 method: "post", 38 body: formData, 39 data: { 40 "post_id": code[i], 41 "unique_id": unique 42 } 43 } 44 45 fetch("<?php echo home_url('wp-admin/admin-ajax.php'); ?>", require) 46 .then(res => { 47 // return data.json(); 48 }) 49 .then(date => { 50 //ここにいいね機能の表示コードを書かないとリアルタイムで反映させることが出来ないのでは…? 51 }) 52 53 .catch(error => { 54 console.log(error); 55 }); 56 57 58 }); 59 }); 60</script> 61 62<!-- いいねをデータベースに登録 --> 63<?php 64//もしいいねテーブルにて質問IDといいねを押した UUID(IPアドレス)と照合させる 65if (!empty($_POST["post_id"]) === true or !empty($_POST["unique_id"]) === true) { 66 67 $post_id = $_POST["post_id"]; 68 $unique_id = $_POST["unique_id"]; 69 70 // $wpdbでSQLを実行 71 global $wpdb; 72 73 // goodテーブルから k_code(質問を一意に識別する番号)と g_unique(いいねを押した UUID(IPアドレス))が一致したレコードを取得するSQL文 74 $sql = "SELECT * FROM good WHERE k_code=? AND g_unique=?"; 75 76 $query = $wpdb->query($wpdb->prepare($sql)); 77 78 $data[] = $post_id; 79 $data[] = $unique_id; 80 81 $query = $wpdb->query($wpdb->prepare($data)); 82 $data = array(); 83 84 //Wordpress で SELECT クエリからすべてのデータを連想行の配列として取得する 85 $rec = $wpdb->get_results('SELECT * FROM good', ARRAY_A); 86 87 //もしいいねテーブルにて質問IDといいねを押した UUID(IPアドレス)が存在しなければ 88 if (!empty($rec) === true) { 89 $sql = "DELETE FROM good WHERE k_code=? AND g_unique=?"; 90 91 $query = $wpdb->query($wpdb->prepare($sql)); 92 93 $data[] = $post_id; 94 $data[] = $unique_id; 95 96 $query = $wpdb->query($wpdb->prepare($data)); 97 $data = array(); 98 99 } else { 100 $sql = "INSERT INTO good(k_code, g_unique, good) VALUES(?,?,1)"; 101 102 $query = $wpdb->query($wpdb->prepare($sql)); 103 104 $data[] = $post_id; 105 $data[] = $unique_id; 106 107 $query = $wpdb->query($wpdb->prepare($sql)); 108 109 110 } 111} 112?> 113 114<!-- いいねの表示について --> 115<?php 116//データベース接続 117global $wpdb; 118 119//lile_countテーブルから m_w(ユーザーの回答)のレコードを取得するSQL文 120$sql = "SELECT * FROM lile_count WHERE m_w = ? ORDER BY time DESC"; 121 122$query = $wpdb->query($wpdb->prepare($sql)); 123$data[] = $day; 124 125$query = $wpdb->query($wpdb->prepare($data)); 126$data = array(); 127 128 129 130while (true) { 131 //Wordpress で SELECT クエリからすべてのデータを連想行の配列として取得する 132 $rec = $wpdb->get_results('SELECT * FROM lile_count', ARRAY_A); 133 134 //もしデータがなければ終了する 135 if (empty($rec) === true) { 136 break; 137 } 138 print '<div class="card">'; 139 print '<div class="card-in">'; 140 print '<div class="ico">'; 141 142 //userテーブルから name(名前)のレコードを取得するSQL文 143 $sql = "SELECT img FROM user WHERE name=?"; 144 145 $wpdb2 = $wpdb->query($wpdb->prepare($sql)); 146 147 $data[] = $rec["name"]; 148 149 $wpdb2 = $wpdb->query($wpdb->prepare($data)); 150 $data = array(); 151 152 //Wordpress で SELECT クエリからすべてのデータを連想行の配列として取得する 153 $rec2 = $wpdb2->get_results('SELECT * FROM user', ARRAY_A); 154 155 //もしユーザーアイコン画像がなければ 156 if (empty($rec2["img"]) === true) { 157 $nanasi = "nanasi.png"; 158 $disp_gazou = "<img src='./img/" . $nanasi . "'>"; 159 //画像を出力する 160 print $disp_gazou; 161 } else { 162 $disp_gazou = "<img src='./img/" . $rec2['img'] . "'>"; 163 print $disp_gazou; 164 } 165 print "</div>"; 166 print '<div class="bun">'; 167 print '<div class="time">'; 168 print date('Y年n月j日 g:i', strtotime($rec["time"])); 169 print '</div>'; 170 print '<div class="name">'; 171 print $rec["name"]; 172 print '</div>'; 173 print '</div>'; 174 print '</div>'; 175 print '<div class="kaitou">'; 176 print $rec["comment"]; 177 print "</div>"; 178 $code = $rec["code"]; 179 print "<div class='goodiine'>"; 180 181 182 if (!empty($name) === true) { 183 //goodテーブルから k_code(質問を一意に識別する番号)と g_unique(いいねを押した UUID(IPアドレス))のレコードを取得するSQL文 184 $sql = "SELECT * FROM good WHERE k_code=? AND g_unique=?"; 185 186 $wpdb3 = $wpdb->query($wpdb->prepare($sql)); 187 $data[] = $rec["code"]; 188 $data[] = $name; 189 190 $wpdb3 = $wpdb->query($wpdb->prepare($data)); 191 $data = array(); 192 //Wordpress で SELECT クエリからすべてのデータを連想行の配列として取得する 193 $rec2 = $wpdb3->get_results('SELECT * FROM user', ARRAY_A); 194 195 //もし名前がテーブルに存在しなければ 196 if ($rec["name"] === $name) { 197 print "<div class='clear'>"; 198 print "<form action='sakujyo.php' method='post'>"; 199 print "<input type='hidden' name='re' value='" . $code . "'>"; 200 print "<input type='submit' value='回答を削除'>"; 201 print "</form>"; 202 print "</div>"; 203 print "<div id='good$code'><img src='./img/ハートのマーク3.png'></div>"; 204 205 //存在していれば 206 } else if (!empty($rec3) === true) { 207 208 print "<div id='good$code' class='on'><img src='./img/ハートのマーク3.png'></div>"; 209 } else { 210 print "<div id='good$code'><img src='./img/ハートのマーク3.png'></div>"; 211 } 212 } else { 213 print "<div id='good$code'><img src='./img/ハートのマーク3.png'></div>"; 214 } 215 216 //goodテーブルから k_code(質問を一意に識別する番号)のレコードを取得するSQL文 217 $sql = "SELECT * FROM good WHERE k_code=?"; 218 219 $wpdb4 = $wpdb->query($wpdb->prepare($sql)); 220 //回答を一意に識別する番号 221 $data[] = $code; 222 223 $wpdb4 = $wpdb->query($wpdb->prepare($data)); 224 $data = array(); 225 $iine = 0; 226 227 while (true) { 228 //Wordpress で SELECT クエリからすべてのデータを連想行の配列として取得する 229 $rec4 = $wpdb4->get_results('SELECT * FROM user', ARRAY_A); 230 //もしいいねがなければ 231 if (!empty($rec4["good"]) === true) { 232 //いいねを登録する 233 $g_i[] = $rec4["good"]; 234 } else { 235 break; 236 } 237 //いいね数をカウントする 238 $iine = count($g_i); 239 } 240 $g_i = array(); 241 print "<div id='iine$code'>$iine</div>"; 242 print "</div>"; 243 print "</div>"; 244 245 if (!empty($name) === true) { 246 247 if ($rec["name"] === $name) { 248 $code = "non"; 249 } 250 } 251 $k_code[] = $code; 252 $g_iine[] = $iine; 253} 254//もしいいね数がカウントされてなければ 255if (!empty($g_iine) === true) { 256 $g_iine = json_encode($g_iine); 257} 258//もし質問を一意に識別する番号がなければ 259if (!empty($k_code) === true) { 260 $k_code = json_encode($k_code); 261} 262 263if (!empty($name) === true) { 264 $name = json_encode($name); 265} 266print "<div id='goodnon'></div>"; 267 268$dbh = null; 269?> 270 271 272<div id="scrolltop" class="st">top</div> 273<div id="scrollmenu" class="sm">menu</div> 274 275<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 276<script src="main.js"></script> 277<script src="anime.min.js"></script> 278<script src="footerFixed.js"></script> 279<script type="text/javascript"> 280 //let name = 281 let code = <?php echo $k_code; ?>; 282 let name = <?php echo $name; ?>; 283 let g_iine = <?php echo $g_iine; ?>; 284</script> 285<script src="sub.js"></script>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

参考サイト②を見てみるとカウントには2パターンあり表示部分をAjaxで書かないとリアルタイムでの反映は不可能なようです。

補足

※参考サイト
https://denkenmusic.com/phpmysql%E3%81%A7%E5%A4%A7%E5%96%9C%E5%88%A9%E3%82%B5%E3%82%A4%E3%83%88%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B%E2%91%A5%E3%81%84%E3%81%84%E3%81%AD%E6%A9%9F%E8%83%BD%E3%81%AE%E5%AE%9F/#POST

https://zenn.dev/cota_hu/articles/how-to-count-so-many

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

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

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

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

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

utm.

2025/01/08 16:28

そもそもいいね数をリアルタイムに更新する必要がない
homepage-site

2025/01/09 01:06

utm.さん回答ありがとうございます。 無理にリアルタイムで更新する必要はないということで理解致しました。
guest

回答1

0

ベストアンサー

状況がわかりませんが、ログイン制ではない掲示板自体がだめだし、匿名のいいね機能なんて絶対だめでしょう。IPアドレスではユーザーを特定できないです

まずはログイン制にして、ユーザーIDと質問IDの紐づけをRDBで管理します。そのうえで表示されている質問一覧のIDを定期的にAPIに投げれば更新されたいいね数は取得できるはずです。(サーバー側がそういうAPIを用意していればという前提ですが)

投稿2025/01/09 00:27

yambejp

総合スコア116921

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

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

homepage-site

2025/01/09 01:39

A.yambejpさん回答ありがとうございます。 7~10日で削除される掲示板を作成しているのですが、匿名のいいね機能は何故駄目なのでしょうか…? 理由を教えて頂けると助かります。
yambejp

2025/01/09 01:45

>匿名のいいね機能は何故駄目 「ポケモンコイル祭り」「イナズマイレブン五条事件」などで検索するとよいでしょう
homepage-site

2025/01/09 02:18

A.yambejpさん回答ありがとうございます。 匿名だといたずらでいいね数が上下するからということでしょうか? 期間が短く質問が多ければ分散されると考えております。 ユーザーを特定する方法として、UUID を選択したのは膨大なパターンから将来に渡って重複しないのではないかと思いました。
yambejp

2025/01/09 02:40 編集

>匿名だといたずらでいいね数が上下するからということでしょうか? 言い換えれば「いいね」の機能が「いいね」に利用されないということですから、目的の通り動作しないのであれば「いらない機能」ということです。むしろこの機能の実装ならUUIDと紐づける必要もなく、発言IDに対して「いいね」を押すたびに無条件にインクリメントさせればよいと思います ログイン制にしない意図がわからないのでこれ以上は助言しかねます。まあどうしてもというならその運用でも構わないのではないでしょうか?(私が困るわけではないので)
homepage-site

2025/01/09 03:01

A.yambejpさん回答ありがとうございます。 ログイン制にしない意図としては、属人性の軽減、Q&Aの敷居を下げることになります。
tezcello

2025/01/09 04:50

> 属人性の軽減 回答の信用・信頼も下落すると思います。 > Q&Aの敷居を下げる 質問・回答の質も下がり、スパム等の迷惑投稿も増えるでしょう。
yambejp

2025/01/09 04:56 編集

ちょっと認識がちがったのですが・・・ 質問・回答はログイン制なんですよね?(いいねだけが自由に押せるのかなと) もしそちらがフリーで書き込める仕様でしたら、問題発言があったとき個人の特定ができないですが大丈夫でしょうか?裁判で訴えらて億単位の賠償請求がきたとき、ひろゆきみたいに海外に逃げるつもりでしょうか?
homepage-site

2025/01/09 05:13

tezcelloさん回答ありがとうございます。 回答の信用・信頼の低下は下落してしまいそうですね、数で補えると考えたのですが… 最近のヤフー知恵袋を見ると回答の数が減っているように見えて、その要因がログイン制ではないかと考えました。 質問・回答の質はあまり変わらないのではないかと思っております。 ログイン制にしているサイトであっても必ずしも質が高いQ&Aになっているようには見えませんでした。
homepage-site

2025/01/09 05:19

yambejpさん回答ありがとうございます。 フリーで書き込める仕様にしております。 IPアドレスをデータベースに保存することで個人の特定は可能だと考えているのですが、それでは危険でしょうか? ライブドアブログのような形でQ&A掲示板を運営できるのではないかと考えたのですが…
yambejp

2025/01/09 05:28

>IPアドレスをデータベースに保存することで個人の特定 IPアドレスは偽装やなりすましができますし、串を通せば個人情報としてつかえないと思いますが・・・ 逆に複数端末からアクセスしたとき「同じ人間」の書き込みと判断できないですよね
tezcello

2025/01/09 05:50

> 数で補えると考えた 集まるのがゴミばかりでは補いようがありません > ログイン制にしているサイトであっても必ずしも質が高いQ&Aになっているようには見えません ログイン制にしないともっとトンデモないことになるでしょう まともな(=信用・信頼できる)回答者であるかの判断も出来なくなるでしょうし > 最近のヤフー知恵袋を見ると回答の数が減っているように見えて、その要因がログイン制ではないか 縛りの緩いログイン制のおかげで低品位の質問が連発され、回答側が疲弊したからでしょう。 また、SNSで得られる程度の情報で満足する質問者は、知恵袋で質問なんてしないし、ggrkなんて回答を浴びせられて寄り付かなくなるって循環では?
homepage-site

2025/01/09 06:19 編集

yambejpさん回答ありがとうございます。 IPアドレスで特定可能だと考えておりました… IPアドレスは偽装やなりすましというのはVPNで可能だと思うのですが、VPNをブロックする方法では不足しているのでしょうか? またログイン制でメールアドレスを入力させるのは個人情報を特定するためということでしょうか? ※ 参考サイト https://qiita.com/mf_Mii/items/b0aec1215b7a694e856c
homepage-site

2025/01/09 06:03

tezcelloさん回答ありがとうございます。 質問内容に制限を設けなかったから品位の低い回答が増えて回答側が疲弊したという考えはありませんでした。 回答の母数をあげるためにログイン制を無くすことを思いついたのですが色々と問題がありそうですね…
yambejp

2025/01/09 06:12 編集

>ログイン制でメールアドレスを入力させるのは個人情報を特定するためということでしょうか? あれ?私メールアドレスをキーにするっていいましたっけ? 基本は登録メールにワンタイムパスワードをつけて送付し、クリックすることでそのメールアドレスの利用者だと特定するという流れではありますが、メールアドレスとは別にユーザーIDで管理するほうが確実です。 きちんとしたサービスを提供するのであれば携帯をつかった二段階認証などが必要になりますが、どこまで精度を担保したいのかによります。(二段階認証をする場合はユーザーのハードルが若干高くなって敬遠される可能性はあります) とはいえ、メールアドレスを預かる事になった場合は個人情報ですので、悪質なハッカーにユーザー情報を抜かれないように厳密な管理が必要になりますので、サービス提供の際にはそれなりのスキルがついてからの対応になるでしょう。
homepage-site

2025/01/09 06:48

yambejpさんアドバイスありがとうございます。 IPアドレスの偽装やなりすましについて1点お聞きしたいのですが、VPNをブロックする方法では防ぐことは難しいのでしょうか? 複数端末からアクセスした場合も考えてみたのですが、正確なIPアドレスを取得できれば特定も可能ではないかと思いました。 ※ 参考サイト https://qiita.com/mf_Mii/items/b0aec1215b7a694e856c https://michisugara.jp/proxy-vpn-blocker-plugin/
shiketa

2025/01/09 07:12 編集

あなたが使用しているデバイス、スマホでもPCでもいいので、そのIPアドレスを確認してみましょう。 10.x.x.xとか172.x.x.xとか192.168.x.xのプライベートIPアドレスであることが多いでしょう。 ここからあなたのサイトにアクセスしたとき、あなたのサイトが取得できるのはこのプライベートIPアドレスではなく、プロバイダが用意したプロキシ(串)のグローバルIPアドレスです。串の下にはン十万ン百万単位のデバイスがあることでしょう。 この状態で、IPアドレスから個人を特定できますか? プロバイダはどのデバイスにどのプライベートIPアドレスを割り当てたのかを管理しているとは思いますが、それをあなたには教えてくれないでしょう。きっと。
yambejp

2025/01/09 07:36 編集

>IPアドレスの偽装やなりすましについて1点お聞きしたい たとえばクローラーを使い wget -e use_proxy=yes -e http_proxy=http://プロクシサーバー:ポート http://example.com とするとexample.comで得られるIPアドレスはプロクシサーバーのものになります よくドラマである「海外の複数のプロクシを経由して接続されていてユーザーの特定できません」という状態です
tezcello

2025/01/09 07:32

> 回答の母数をあげるためにログイン制を無くす ゴミが容易に投稿できる状況は、誰にもメリットがありません... 母数が増えても有益な情報である確率が下がるだけだと思います。 > 正確なIPアドレスを取得できれば特定も可能 ケータイ電話からのアクセスは、特定範囲のIPを大勢の端末で共有しているのでは? __流石にIPv6に完全移行は出来ていないんじゃない? > メールアドレスを預かる事になった場合は個人情報 確か、アクセス履歴(投稿日時等も含む)とか、投稿内容とかも個人データだったかと。 メールアドレスだけが保護しなければいけないモノでは無く、その周辺も保護されるべきモノだったと思います。 個人情報保護法については、一般によく知られている情報には誤りや不正確が多いらしいので、かなりの用心が必要でしょう。 __チャンとした勉強が必要!!
homepage-site

2025/01/09 09:40

shiketaさん回答ありがとうございます。 プライベートIPアドレスから辿れると考えていたのですが甘かったようです…
homepage-site

2025/01/09 09:43

yambejpさん回答ありがとうございます。 複数のプロクシを経由していても追跡することが可能だと考えていたのですが特定することは難しいと理解出来ました。 何度もお聞きしてしまい申し訳ありません。
homepage-site

2025/01/09 09:48

tezcelloさん回答ありがとうございます。 IPv6のことが頭から消えておりました確かにIPv4の場合もありますね。 個人のデータが流出しないよう勉強致します。
yambejp

2025/01/09 09:50

>プロクシを経由していても追跡することが可能 海外のプロクシは事件性があっても捜査に協力はしてくれません(協力義務はない)し、ログが非公開だったりログ自体を保管していない(保管も義務ではない)場合、多段で串を噛ませばかなり追跡が難しいでしょう。絶対に不可能かと言われれば技術的にはたぶんないことはないのでしょうけど、それを解析できるスキルが質問者さんにあるかといえば相当厳しいように見受けられますが?
68user

2025/01/09 10:18

匿名でのいいねを許容するかどうかはサービス提供者がメリットデメリットを考えた上で決めることであって、回答者がいいだのダメだの決める話ではないです (意見ならご自由にどうぞですが)。実際ヤフコメやガールズちゃんねるなど匿名でいいねできるサービスがありますし。 サイト運営者の立場としては  ・いいねを押した IPアドレスが proxy や NAT 経由であることは正確には判別できません   (proxy がヘッダを渡してくるか次第)  ・いいねを押した IPアドレスが VPN 経由であることは普通は判別できません   (VPN サービスが公開している IP アドレス帯と突き合わせるしかないのでは?) です。押された回数分素直にカウントアップするもよし、IP アドレス重複時はカウントアップしなもよし、カウントアップしない場合でもあたかもカウントアップされたかのように表示するもよし、CookieやLocalStorageで管理するもよしです。
homepage-site

2025/01/10 04:58

A.yambejpさん回答ありがとうございます。 IPアドレスというものを信用しすぎておりました、もう一度考え直してみます。
yambejp

2025/01/10 05:13

普通にログイン制にすればいいので要検討ですね 知識やスキルがおいつくならSNS認証もありですが、SNS側が急にサービスを停止するリスクもありますのでご注意ください
homepage-site

2025/01/10 06:11

A.68userさん回答ありがとうございます。 もう一度セキュリティを再考していいねぼたんの実装を試みます。
homepage-site

2025/01/10 11:26

A.yambejpさん回答ありがとうございます。 アドバイス頂いた登録メールにワンタイムパスワードをつけて送付し、リンクをクリックするという形で進めてみます。 以前お問合せページを作成した際にそちらの方法で作成しているので、同じ作りで考えてみます。
otn

2025/01/11 06:57

> 回答の信用・信頼の低下は下落してしまいそうですね、数で補えると考えたのですが… 目的が、 ・サイトアクセス数を稼ぎたい(広告目的など) ・質の高いQAサイトを提供したい のどちらに近いかで、考えることも違ってくるかと思います。理由は他の方の書いている通り。 匿名掲示板でも、「同好の士が集まる」的な場所だと質の高い回答が得られたりする所もあった気がしますが、そういう場所は意図的に作るのは難しい。 「あなた自身が興味も知識もある特定分野」に限定したQAサイトを作り、あなたが質の高い回答を繰り返して検索にヒットするようになれば、知識のある他の人も集まってきて、「ここで聞けば何とかなる」と思って知識の無い人も参加するようになるというのはあり得るかと思います。それがご希望なのかどうか分かりませんが。 IPアドレスでのチェックは自分でやるならホワイトリスト方式でしょうか。意味あるかどうか不明ですが。 「その投稿がされた正確な時刻とアクセス元IPアドレス」は一定期間の保存が義務づけられており、犯罪行為があった場合は、警察にその情報を提供すれば、責任を果たしたことになるはずです。 その期間内なのに記録が残ってない場合、意図的であると判断されると罰を受ける可能性もありますね。意図的でないことが証明できれば刑事罰はないでしょう。民事は分からない。 その先は、国内で合法的に行っているプロバイダーであれば、彼らは警察から「この日時でこのIPアドレスでアクセスしたのはどこの誰だ?」と聞かれたら情報提供義務があるので、そこは自分でプロバイダーと交渉する必要は無いです。「刑事事件として扱ってもらうようにする」必要はありますが。 で、その記録したIPアドレスが海外のProxyやVPNで警察がその先を追えない場合に責任がどうなるか??法律でProxyやVPN経由でないかのチェックまでは求められていないと思うので刑事責任はおそらく大丈夫だと思いますが、民事はどうか。私が知らないだけかも知れませんが、おそらくこういうケースでの民事の判例はまだない。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問