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

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

ただいまの
回答率

91.81%

  • PHP

    12905questions

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

  • セキュリティー

    303questions

    このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

  • PDO

    211questions

    PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

  • CSRF

    23questions

    クロスサイトリクエストフォージェリ (Cross site request forgeries、CSRF)は、 外部Webページから、HTTPリクエストによって、 Webサイトの機能の一部が実行されてしまうWWWにおける攻撃手法です。

  • XSS

    21questions

    XSS【クロスサイトスクリプティング】は、 ソフトウェアのセキュリティホールの一つで、Webサイトに脆弱性が あることからその脆弱性を利用し攻撃する手法です。 主に、入力フォームなどから悪意あるスクリプトを挿入し 該当ページを閲覧したブラウザ上でそのスクリプトを実行します。

【PHP】簡易掲示板の作成② 記述法、セキュリティについてアドバイス頂けないでしょうか。

解決済

回答 3

投稿 2017/04/29 19:12

  • 評価
  • クリップ 2
  • VIEW 1,363

tnk_fuku

score 21

簡易掲示板をつくる中でうまく動作せず先日質問し、その後も構成を変えるなどしてとりあえず自分が思ったように動くものにはなりました。
過去の質問はこちら

そこで完成したものをご確認頂き、下記の点についてアドバイスを頂ければと思います。

  • 記述方法に誤りはないか
  • セキュリティ対策は十分か

---バージョン---
MariaDB 10.1.21
PHP 7.0.15

---ファイル構成・機能---
index.php(投稿一覧表示、新規投稿フォーム)
confirm.php(投稿内容確認画面)
complete.php(書き込み完了画面)
db_info.php(データベース接続情報)
encode.php(エスケープ処理)
error.php(エラー表示)

---テーブル定義---
テーブル名:bbsdata
カラム構成:

name title day msg
varchar(255) varchar(255) datetime text
投稿者名 投稿タイトル 投稿日時 投稿内容

---実装したセキュリティ対策---
XSS対策(エスケープ処理)
CSRF対策(トークンの使用)
SQLインジェクション対策(PDOの使用)
(セキュリティ対策についてはしっかりと知識をつけたいと思っています)

以下、ファイルです。

db_info.php

<?php
$dsn = 'mysql:host=localhost; dbname=bbs;charset=utf8';
$user = 'bbsuser';
$pass = 'bbspass';


encode.php

<?php
function h($str){
  return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}


error.php

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>エラー表示</title>
</head>
<body>
  <p>
    <?php echo $error; ?>
  </p>    
</body>
</html>

index.php

<?php
session_start();
$_SESSION['token'] = bin2hex(random_bytes(32));
require_once('db_info.php');
require_once('encode.php');

try {
  $pdo = new PDO($dsn, $user, $pass);
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch (PDOExeption $e){
  $error = 'データベース接続に失敗しました: ' . $e->getMessage();
  include 'error.php';
  exit();
}
try {
  $sql = "select * from bbsdata order by day desc";
  $result = $pdo->query($sql);
} catch (PDOExeption $e) {
  $error = 'データの取得に失敗しました:' . $e->getMessage();
  include 'error.php';
  exit();    
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>簡易掲示板</title>
  <style type="text/css">
    body {
      background-color: #E1EDFF;
      line-height: 1.5rem;
    }
  </style>
</head>
<body>
<h1>簡易掲示板</h1>
<!-- 投稿フォーム 
こちらからconfirm.phpにポストしたものをconfirm.php内ではセッションに格納しており、未入力欄があった場合にindex.phpに戻っても入力していた項目は保持されるよう、valueにセッションを入れました
-->
<form action="confirm.php" method="post">
  名前:<input type="text" name="name" value="<?php if(isset($_SESSION['name'])){ echo h($_SESSION['name']); } ?>"><br>
  タイトル:<input type="text" name="title" value="<?php if(isset($_SESSION['title'])){ echo h($_SESSION['title']); } ?>"><br>
  メッセージ:<br>
  <textarea name="msg" rows="10" cols="30"><?php if(isset($_SESSION['msg'])){ echo h($_SESSION['msg']); } ?></textarea><br>
  <input type="hidden" name="token" value="<?php echo h($_SESSION['token'])?>">
  <input type="submit" value="確認画面へ" name="trans">
</form>
<!-- 投稿フォーム終了 -->
<hr>
<?php
$i = 1;
//投稿一覧表示
foreach($result as $row) {
  $s = "<p>($i)タイトル: <strong>%s</strong><br>投稿者: %s 投稿日: %s<br>内容:<br>%s</p>";
  printf ($s,h($row['title']),  h($row['name']), h($row['day']), nl2br(h($row['msg'])));
  $i++;
}
//投稿一覧終了
?>
</body>
</html>

confirm.php

<?php
session_start();
require_once('encode.php');

//index.phpでのトークンがセットされていなかったら不正アクセスとみなす
if (!isset($_SESSION['token']) || $_SESSION['token'] === '') {
  echo '不正なアクセスです。';
} 
//トークンなど諸々が正しくセットされていたら
elseif (isset($_POST['trans'], $_SESSION['token'], $_POST['token']) && $_SESSION['token'] === $_POST['token']) {
//フォームでポストされたデータをセッションに格納し
$_SESSION['name'] = $_POST['name'];
$_SESSION['title'] = $_POST['title'];
$_SESSION['msg'] = $_POST['msg'];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>確認画面</title>
  <style type="text/css">
    body {
      background-color: #E1EDFF;
      line-height: 1.5rem;
    }
  </style>
</head>
<body>
    <h1>確認画面</h1>
<?php
//フォームに未入力項目があればその旨とindex.phpに戻るボタンを表示
  if ($_SESSION['name'] == "" || $_SESSION['title'] == "" || $_SESSION['msg'] == ""){
    if ($_SESSION['name'] == "") {
      echo "名前を入力して下さい<br>";
    }
    if ($_SESSION['title'] == "") {
      echo "タイトルを入力して下さい<br>";
    }
    if ($_SESSION['msg'] == "") {
      echo "メッセージを入力して下さい<br>";
    }
    ?>
    <a href="index.php">入力画面に戻る</a>
    </body>
    </html>
  <?php
  } else {
  //フォームに未入力項目がなければ内容を確認表示しsubmitボタンを押すと再度confirm.php自身にセッションでデータを渡す
  ?>
    タイトル: <?php echo h($_SESSION['title']); ?>
    投稿者: <?php echo h($_SESSION['name']); ?><br>
    内容:<?php echo nl2br(h($_SESSION['msg'])); ?>
    <form action="confirm.php" method="post">
      <input type="hidden" name="token" value="<?php echo h($_SESSION['token']); ?>">
        <input type="submit" value="送信する" name="regist">
    </form>
    </body>
    </html>
  <?php
  }
}
//confirm.php自身からポストやセッションが正しく渡されていたらDBにデータをinsertしcomplete.phpへ遷移
elseif (isset($_POST['regist'], $_SESSION['token'], $_POST['token']) && $_SESSION['token'] === $_POST['token']) {
  require_once('db_info.php');

  try {
    $pdo = new PDO($dsn, $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
  } catch (PDOExeption $e){
    $error = 'データベース接続に失敗しました: ' . $e->getMessage();
    include 'error.php';
    exit();
  }
  try {
      $sql = "insert into bbsdata (name, day, title, msg) values (:name, now(), :title, :msg)";
      $s = $pdo->prepare($sql);
      $s->bindValue(':name', $_SESSION['name']);
      $s->bindValue(':title', $_SESSION['title']);
      $s->bindValue(':msg', $_SESSION['msg']);
      $s->execute();
  } catch(PDOExeption $e) {
      $error = 'データの書き込みに失敗しました: ' . $e->getMessage();
      include 'error.php';
      exit();        
  }

  $_SESSION = array();
  if (isset($_COOKIE[session_name()])){
    setcookie(session_name(), '', time() -3600, '/');
  }
  session_destroy();
  header("Location: http://localhost/complete.php/", true, 303);
  exit();
} else {
//confirm.php自身からポストやセッションが正しく渡されていなかったら不正アクセスとみなす
  echo '不正なアクセスです。';
}


complete.php

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>完了画面</title>
  <style type="text/css">
    body {
      background-color: #E1EDFF;
      line-height: 1.5rem;
    }
  </style>
</head>
<body>
  <h1>書き込みが完了しました</h1>
  <a href="http://localhost/index.php">トップページへ戻る</a>
</body>
</html>


以上、

  • 記述方法に誤りはないか
  • セキュリティ対策は十分か
    といった点についてアドバイスの程よろしくお願い致します。
  • 気になる質問をクリップする

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

    クリップした質問はマイページの「クリップ」タブからいつでも見ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2017/04/29 20:12

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 3

+8

このスクリプトで匿名掲示板を運営するのであれば、
・記述方法に誤りはないか
・セキュリティ対策は十分か
のいずれも十分ではありません。

多分、入門用のサンプルソースから改変を加えて今の形にしたため、本来行うべき設計作業をしていないためだと思います。

一般的にアプリケーションを作成するには
・どんな機能を実装するか?
・その機能実装で、どのような攻撃が考えられるか?
・その攻撃をどのように防ぐか?また、それを検知する手段はどのように準備するか?
といった分析を行った上で、各種の情報を集め、セキュリティに対する要件を設計します。

例えば匿名掲示板を運営するのであれば、コメントの投稿が必須となるので
・不適切投稿の除外(詐欺サイトへの誘導等)
・荒らし対策
・連続投稿の阻止
等々の考慮が必要となりますが、それぞれがどのような方法で実施され、それに対してどのような方法が取れるかを検討することが必要となります。

その検討結果から、金銭や時間的なコストを考慮して、どこまでどのような実装を行うか決め、セキュリティ要件の定義を行うことになりますが、今回のスクリプトにはそういった事を行った形跡がありません。

これがなされていないと、
・CSRF対策を行っているのに、投稿ログの記録がない
・リファラの確認や連続投稿への対策といった基本事項の実装がない
といったチグハグなコードになってしまいます。

実際に運用するサイトを検討しているのであれば、再度設計から見直してはいかがでしょうか?
記述方法に関しては、正直細かくみていない上、私自身も勉強中なので適切なコメントが付けられませんが、設計と同じくチグハグさが見られます。
こちらは詳しい方のコメントがあるとイイのですが^^;

投稿 2017/04/29 20:15

編集 2017/04/29 20:16

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/04/29 22:52

    te2jiさん、アドバイスありがとうございます。
    自学用にとりあえず動くものを作ってPHP、セキュリティ対策について知識を付けていきたいと思い作成しました。

    初心者ではありますが、最終的には一般公開するアプリを作れるようになりたいと思っていますので、ご指摘頂いた点を考慮出来ていなかったのは浅はかでした。

    「わからないことがわからない」というのが本音で、それも基礎知識のなさのせいなのでしょうね。

    それにしても正直、-3の評価をもらって少し凹みましたf(^^;)
    te2jiさんから具体的なポイントをご提示頂いてますので、一つ一つ調べながら知識をつけていきたいと思います!

    記述方法についても何かしらコメントを頂けるとありがたいですね。。

    キャンセル

  • 2017/04/29 23:32

    ちゃんとアプリの設計をしないのは、入門書にあるサンプルから発展させる弊害なんで、だいたいの人が一度は通る道かと^^;

    ちなみにですが、記述した例は、ザクッと思いつくままに書いたので重要ではありますが、網羅性はありません。注意して下さい。

    > 記述方法についても何かしらコメントを頂けるとありがたいですね。

    これは、実際にコードをたくさん見たり書いている人にコメントしてほしいです。私はエンジニア活動はじめて2年目なので、人のコードをざっと見て的確なコメントができるほどのスキルはありません。結構注目を集めた質問になっているので、レビュー慣れしてる人がコメントくれるとイイのですけど。

    以下、余談w
    > それにしても正直、-3の評価をもらって少し凹みましたf(^^;)
    私は、ちょっと煽りすぎて最高-7まで行きました!まぁ、お互いがんばりましょう^^

    キャンセル

  • 2017/04/30 00:02

    >ちなみにですが、記述した例は、ザクッと思いつくままに書いたので重要ではありますが、網羅性はありません。注意して下さい。

    それでもこうやってコメントを頂いたのは本当にありがたいです。
    独学していると道しるべを見つけるのもなかなか大変で・・・。(自分が下手クソなだけでしょうけど)

    >結構注目を集めた質問になっているので、レビュー慣れしてる人がコメントくれるとイイのですけど。

    頂ければありがたいですが、今回の質問が他人任せなスタンスになってしまったようですので、期待しないほうが良さそうですね。。

    >私は、ちょっと煽りすぎて最高-7まで行きました!

    勇気が湧いてきました(笑)
    凹んでもしょうがないので頑張ります!

    キャンセル

  • 2017/04/30 18:13

    基礎的なところからわかっていないので、まずは下記のページを読み込んで知識を深めたいと思います。

    安全なウェブサイトの作り方
    https://www.ipa.go.jp/files/000017316.pdf

    【PHP超入門】Cookieとセッションについて
    http://qiita.com/7968/items/ce03feb17c8eaa6e4672

    【PHP超入門】HTTP(GET・POST)について
    http://qiita.com/7968/items/4bf4d6f28284146c288f

    $_GET, $_POSTなどを受け取る際の処理
    http://qiita.com/mpyw/items/2f9955db1c02eeef43ea

    キャンセル

  • 2017/04/30 22:17

    記述されているのはいずれもコード寄りのページですね。
    一般用語か不明ですが、セキュリティバグ対応とよばれるものです。

    私が記述している内容は、セキュリティ要件だとか設計だとかそういったものなので、区別して考える必要があります。

    セキュリティバグの対応は、基本的にやることや気にすべき内容はほぼ同じなので、本やブログで紹介されやすいのですが、要件だとか設計だとかは、事例調査や経験の上で検討がなされるため、独学が難しいです。

    企業の担当者であれば、RFI等で情報をあつめるとかできるのですが、個人だとなかなか情報の入手ができません。厳しいところですね。。。
    古典的な事例を潰していくとか、セミナーとかでトレンドを追うとかが精一杯かもしれないですが、アンテナ広げてお互いにがんばりましょう!

    キャンセル

  • 2017/05/01 13:45

    アドバイスありがとうございます。
    やはり個人では限界があるんですね。
    ただ、まだ個人の限界を感じれるほど知識もついてないので出来る事からコツコツやっていきます!

    キャンセル

checkベストアンサー

+4

仕様はおいておくとして
「エラーメッセージによる不必要な内部情報の開示」
はよくあるセキュリティ問題の1つです。

  $error = 'データベース接続に失敗しました: ' . $e->getMessage();
  include 'error.php';


基本的にはシステム/関数などのエラーはそのまま表示すべきではありません。

また、エラーメッセージにはユーザー入力が含まれる場合もあり、エスケープ無しでの出力はNGです。

  <?php echo $error; ?>

体系的に情報セキュリティを学ぶなら、まず一度ISO 27000を読むと良いです。オンラインなら無償でJIS Q 27000が参照できます。

https://blog.ohgaki.net/iso-27000-and-secure-programining

(オンラインで検索するにはちょっとしたコツと環境が必要なのでコレを参照。  今のISO 27000のセキュリティ要素はCIA - Confidentiality, Integrity, Avairability、のみではありません。ISO 13335に記載されていたReliability、Authenticity、Accountabilityも要素に加えられています。ログの必要性はAccountability - Non-repudiationとも言われる、に必要とされる要素です。)

セキュアコーディング/セキュアプログラミングの基本概念を理解してから取り組むのが近道です。

https://blog.ohgaki.net/cert-top-10-secure-coding-standard
https://blog.ohgaki.net/owasp-secure-coding-practices-quick-reference-guide

その上で契約プログラミングの概念を理解すると良いでしょう。

https://blog.ohgaki.net/design-by-contract-and-trust-boundary

契約プログラミングを行う場合、正しい信頼境界の概念が重要です。プログラム中には信頼できないデータが多数存在します。信頼境界を考える場合、コンテクストが重要になります。

https://blog.ohgaki.net/how-to-draw-and-protect-trust-boundary

また契約プログラミングの論理的背景である、必要十分条件がよく理解されていないケースが散見されるので「正しくコードが動作する必要十分条件」の再確認もオススメします。

https://blog.ohgaki.net/necessary-and-sufficient-condition-for-programs

コンテクストは出力のセキュリティ対策でも重要です。HTTPやHTML、SQLといったコンテクストも重要ですが、HTMLやSQLなど複雑な処理系の場合、HTML/SQLのどのコンテクストに出力しているのか、正確に把握する必要があります。

https://blog.ohgaki.net/text-interface-processing-basics
https://blog.ohgaki.net/complete-sql-injection-counter-measure

セキュアコーディングや契約プログラミング、信頼境界やコンテクストを理解したら、個別の脆弱性がどのように生まれるのか?自分で理解できるようになりますが、よくあるリスクの一覧と対策はガイドラインを参照するとよいでしょう。

https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project

現在は今年リリース予定のOWASP TOP 10の2017年版のRCが参照できます。こちらは以前の物より改善されているので、現行版でなくRC版を参照すると良いと思います。

OWASP TOP 10で一番目の問題とされているのはInjectionです。私のブログでもほとんどのセキュリティ問題はインジェクションであると書いています。

https://blog.ohgaki.net/almost-all-security-issues-are-injections

記載されているコードには入力バリデーションが一切ありません。

2017年版RCのOWASP TOP 10のA1-Injectionの"How Do I Prevent Injection?"の対策3では、以下のように書かれています。

Positive or “white list” input validation is also
recommended, but is not a complete defense as many
situations require special characters be allowed. If special
characters are required, only approaches (1) and (2)
above will make their use safe. OWASP’s ESAPI has an
extensible library of white list input validation routines. 

ISO 27000で要求されている入力バリデーションは以下のような物になります。

https://blog.ohgaki.net/iso27000-and-input-validation

2017年版RCのOWASP TOP 10のA7-Insufficient Attack Protectionは以下のような対策を求めています。

1. Detect Attacks. Did something occur that is impossible
for legitimate users to cause (e.g., an input a legitimate
client can’t generate)? Is the application being used in a
way that an ordinary user would never do (e.g., tempo
too high, atypical input, unusual usage patterns,
repeated requests)?
2. Respond to Attacks. Logs and notifications are critical to
timely response. Decide whether to automatically block
requests, IP addresses, or IP ranges. Consider disabling or
monitoring misbehaving user accounts.

いろいろあるので書ききれませんが、今のところ一般的なCSRF対策としては記載の方法でも十分とされる、と思います。しかし、もっと良い方法もあります。

https://blog.ohgaki.net/advanced-csrf-token-by-hmac-hash

不必要に$_SESSIONへユーザー入力を保存するのは良くないです。今のPHPは私が実装したLazy Writeが有効です。$_SESSIONに変更がなければ、セッションデータのアクセスタイムスタンプのみが更新され、セッション管理の性能が大幅に向上します。(対応セーブハンドラのみ。ネットワーク経由のストレージを利用する場合に顕著)ユーザー名を$_SESSIONへ保存するのは良いですが、投稿の内容まで保存するのは性能面で良くありません。更新用のデータを$_SESSIONに保存すると”複数タブ”を利用した場合などに競合問題も発生します。

投稿 2017/05/01 06:06

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/05/01 13:55

    YasuoOhgakiさん、コメントありがとうございます。
    実は昨日いろいろと調べていたところ、YasuoOhgakiさんのブログを拝見しました。
    重要なことをたくさん書かれているということはわかりましたが、知識不足でどこから手をつけていけばいいのかわからなかったので、今回このように順を追って解説して頂けて道筋が出来ました。
    ブログにも今回のコメント内容に加筆して記載されているので、しっかり読み込んでみます!

    >不必要に$_SESSIONへユーザー入力を保存するのは良くないです。

    $_SESSIONにデータを保存すると便利だなと思い使っていましたが、複数タブでの競合などが生じるのですね。

    駆け出しで学ぶことばかりですが、知識を獲得することの楽しさを味わいながら頑張っていきます!

    キャンセル

  • 2017/05/01 22:54

    徳丸先生のみならず、大垣先生まで参入してきたteratailすげぇ。
    重鎮が自ら答えてくれるとか少なくとも数万円以上の価値がある。

    キャンセル

-2

簡単にまとめると、
「セキュリティの最終チェック、ぜーんぶ丸投げでお願いします!」
というご質問ですね。

そういうのは専門の会社に依頼すればいいと思います。
最低でも数十万円くらいかかるでしょうけど。

投稿 2017/04/29 22:49

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/04/29 23:18

    前回の質問時に頂いた回答から自分なりに調べてまとめたつもりでしたが、zico_teratailさんのご回答で自分がずれていることがわかりました。

    これからはもっとポイントを絞って質問していきたいと思います。
    ありがとうございました。

    キャンセル

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

ただいまの回答率

91.81%

関連した質問

同じタグがついた質問を見る

  • PHP

    12905questions

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

  • セキュリティー

    303questions

    このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

  • PDO

    211questions

    PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

  • CSRF

    23questions

    クロスサイトリクエストフォージェリ (Cross site request forgeries、CSRF)は、 外部Webページから、HTTPリクエストによって、 Webサイトの機能の一部が実行されてしまうWWWにおける攻撃手法です。

  • XSS

    21questions

    XSS【クロスサイトスクリプティング】は、 ソフトウェアのセキュリティホールの一つで、Webサイトに脆弱性が あることからその脆弱性を利用し攻撃する手法です。 主に、入力フォームなどから悪意あるスクリプトを挿入し 該当ページを閲覧したブラウザ上でそのスクリプトを実行します。

閲覧数の多いPHPの質問

  • トップ
  • PHPに関する質問
  • 【PHP】簡易掲示板の作成② 記述法、セキュリティについてアドバイス頂けないでしょうか。