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

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

新規登録して質問してみよう
ただいま回答率
85.48%
セキュリティー

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

SQL

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

PHP

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

Q&A

解決済

6回答

1574閲覧

登録システムを作成する際の注意するべきこと

退会済みユーザー

退会済みユーザー

総合スコア0

セキュリティー

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

SQL

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

PHP

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

0グッド

2クリップ

投稿2017/05/18 12:58

###前提・実現したいこと
現在PHPにて会員登録システムを作成しています。
その際にセキュリティについて注意しておくことがわかりませんので質問させていただきます。

XSS対策,SQLInjection対策はしてあります。
他に対策するべき点はありますでしょうか?

よろしくお願いします。

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

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

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

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

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

guest

回答6

0

ベストアンサー

いいまとめを書いてくれている方がいますよ。

また、少し難しいですが、セキュリティチェックツールを使われたほうが再テスト等も楽ですし、安全ですよ。

投稿2017/05/18 13:18

h_daido

総合スコア824

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

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

退会済みユーザー

退会済みユーザー

2017/05/18 13:32

チェックツール! こんなものがあるとは知りませんでした。ありがとうございます。
guest

0

te2ji さんが書かれているように、要件の方が大事ですね。SQLインジェクションとかXSSの対策は、全ての機能に必要な対策であって、登録システムに特有の話ではありません。

以下は、私の書いた本からの抜き出しですが、te2jiさんの書かれているログの問題とかもありますね(ログは別の章に書いたので以下にはでてきません)。

ユーザ登録

  • メールアドレスの受信確認
  • ユーザIDの重複防止
  • ユーザの自動登録への対処(任意)
  • パスワードの要件チェック(もちろんユーザIDの要件チェックも)

パスワード変更

  • 現在のパスワードを確認する(再認証)
  • パスワード変更時にはメールでその旨を通知する

メールアドレス変更

  • 新規メールアドレスに対する受信確認(前項参照)
  • 再認証(前項参照)
  • メール通知(前項参照)

パスワードリセット機能
※複雑なので省略

著名なウェブのサービスを使ってみて研究をされるとよいと思います。

投稿2017/05/18 22:12

ockeghem

総合スコア11701

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

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

退会済みユーザー

退会済みユーザー

2017/05/19 07:16

回答ありがとうございます。 リセット機能などは考えていませんでした。実装してみます。
guest

0

アカウントのシステムならば、パスワードのハッシュ保存をしておくべきだと思われます。
というのも、入力されたパスワードを平文で保存している場合もしなんらかのタイミングでパスワードが流出した場合、ユーザーがパスワードを使いまわしている他のサービスも軒並みやられてしまいます。
しかしサルトを付けて一方向関数にぶち込んで保存しておけば元の平文は推測されないのである程度安全性が高まります。
もちろんパスワードを盗まれないのが最善ですけどねw

投稿2017/05/18 13:04

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/05/18 13:05

回答ありがとうございます。 パスワードをハッシュ化するのは全く考えていませんでした。 実装させていただきます。
退会済みユーザー

退会済みユーザー

2017/05/18 13:07

あと、サルトと説明したように、ただハッシュするのではなくパスワードを二回文字列連結させてその後にシステム固有の文字列などを連結させることをおすすめします! そうすれば同じハッシュ関数でもさらに強くなるので! で、ログイン時に入力された文字列をまた同じ関数に突っ込んででた値をDBに保存している値と称号してみれば良いと思います! 頑張ってください!
退会済みユーザー

退会済みユーザー

2017/05/18 13:09

そこまでは全く考えていませんでした。チャレンジしてみます。
退会済みユーザー

退会済みユーザー

2017/05/18 13:51 編集

頑張ってくださいb
Zuishin

2017/05/18 13:36

b というのはビッチを意味することがあるので気を付けましょう。
gallu

2017/05/18 14:40

PHPですと、パスワードの保存には「 password_hash()関数 」が大変に便利です。 こちらの関数はPHP5.5.0以降、ですが、それより低いバージョンでも https://github.com/ircmaxell/password_compat こちらを使って使用できるので、PHPであれば、よほど特殊な理由がない限りは、上述を強くお勧めいたします。 なお比較は password_verify() 関数を使うので、その点だけご注意いただけるとよいか、と思います。
退会済みユーザー

退会済みユーザー

2017/05/19 07:13

password_hash()なんてものがあるんですね。知りませんでした。 ありがとうございます。
guest

0

がると申します。
ベストアンサーがついた後の回答で恐縮ですが、よろしかったら参考程度、まで。

もしお仕事で作成をなさっているようであれば。法的な理由も含めて、IPAの
安全なウェブサイトの作り方
の中にある、
安全なウェブサイトの作り方
安全なSQLの呼び出し方
セキュリティ実装 チェックリスト
あたりをチェックされてみるのも、あるいは有益かもしれません。

以上、なにかの参考にでもなれば幸いです。

投稿2017/05/18 14:44

gallu

総合スコア506

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

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

退会済みユーザー

退会済みユーザー

2017/05/19 07:14

回答ありがとうございます。サイトを参考にしてみます。
guest

0

コーディングを気にするより先に、セキュリティ要件を整理することが必要です。

たとえば、
・登録内容はどういったもので、どのような制限を設けるか
・制限を違反した場合、どのような対応を取るか
・どういったログをとり、それをどのように利用するか
等々、要件をまず決めないと、システムとしてのセキュリティを考えることが出来ません。

セキュリティ要件が決定されてはじめて
・登録内容として数字だけとし、その制限をフロントとサーバサイドの両方でかける。
・違反者は10分間アクセスできなくする
・制限に引っ掛かった場合のみ、ip アドレスとアクションをセットでログとして残す。
といった設計ができるようになり、それをコードに落とすことが出来ます。

まずはどういった要件が必要か洗い出す必要があります。

あまり役には立ちませんが、以下のサイトで雰囲気をつかむことはできるかと思います。
セキュリティ要件確認支援ツールの公開

** 追記 **
記述した要件はどちらかと言うと要件から生まれる仕様に近いので適切ではなかったかも。
記述したかったのは、まず「要件ありき」でシステムを作らないと、良い方向のモノが出来ないということです。

投稿2017/05/18 13:56

編集2017/05/18 14:07
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/05/19 07:13

回答ありがとうございます。 要件整理ですか。全くしていませんでした...今後していくことにします。
guest

0

わりかし、最近話題になった。ShellShockとかもですかね?OSコマンドインジェクションに近い物がありますけど。

投稿2017/05/18 13:26

GrayWingAliance

総合スコア218

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

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

退会済みユーザー

退会済みユーザー

2017/05/18 13:33

こんなものがあるなんて全く知りませんでした....ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問