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

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

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

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

PHP

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

XSS

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

Q&A

解決済

2回答

1404閲覧

inputのtype="checkbox"のバリテーションの必要性はどこまであるのでしょうか

yayak

総合スコア66

セキュリティー

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

PHP

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

XSS

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

0グッド

1クリップ

投稿2018/09/09 00:29

input属性の、checkboxやhiddenなどの値も、POST時に実は簡単に改竄できると知りました。

<input type="checkbox" value="改竄可能"> <input type="hidden" value="改竄可能">

そこで、checkboxやhiddenのPOSTであってもエスケープなどのバリテーションをしようと思ったのですが、

checkboxやhiddenの値をデータベースに保存したり、表示したりなど、何かしら実行する場合はエスケープ等のバリテーションが必須だと思うのですが、

例えば、「checkboxにチェックが入っていたら~する」という以下のような条件分岐をするためだけに利用する場合も、エスケープなどのバリテーションは必要なのでしょうか?

if( isset( $_POST["check_button"] ){ echo 'チェックされていますね'; }

自分なりに考えてみた結果、POSTされた値がどこにも保存されないし、表示されることもなく、条件分岐で使用するだけなら、「エスケープ等のバリテーションの必要はない」、と思ったのですが、

セキュリティに関することなので少々神経質になってしまい、初心者の自分の考えだけで決定するのは危ないと思い、念のためこちらで質問させて頂きました。

初歩的なお恥ずかしい質問なのですが、(当然のことだからか調べてもなかなか出てきません)、もしご存知の方がいらっしゃいましたら、何卒、宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

条件分岐で使用するだけ

上記の条件で使用箇所が条件文内に限定されるのであれば、おかしな値や型もキャストされる前提なので、条件の分岐先が多少おかしくなると思いますが、それほど深刻なセキュリティリスクを抱えるケースは思い浮かびません。

どちらかというと、セキュリティポリシーとして「正式なインターフェイス以外からの投稿を許容しない」とか「すべての投稿には意図があり、その意図をバリデーションとして記述する」といったものがあるかどうかに左右されると思います。

追記
バリデーションって、副次的にセキュアなシステムを補助しますが、本質的には「入力値が想定しているものであることの確認」です。
ですので、セキュリティを担保するには、実際に使用する箇所で値を「セキュアなもの」にして扱う必要があります。

例としては
・XSS 対策として出力時に「htmlspecialchars」でエスケープする
とか。

バリデーション=セキュリティの担保と考えるのは、本質からはちょっとズレています。
バリデーションの必要性は、「ポリシーとして入力値の想定をどう扱うか」が判断基準となります。

投稿2018/09/09 01:58

編集2018/09/09 03:05
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yayak

2018/09/09 17:50

いつも本当にありがとうございます。 とてもわかりやすいご説明に感謝申し上げます。ありがとうございます。 そして、バリデーションという言葉の使い方が、少し雑でした。今後気を付けようと思います。
guest

0

どこまでのセキュリティレベルを担保したいかによりますし、条件分岐内で行われている処理にもよると思います。
trueかfalseを前提にしているのにまったく関係のない値が入ってきて、予期しない挙動をすることで抜け穴ができる、とかもあるかもしれません。
が、ことセキュリティに関しては絶対の正解というものはないと私は思っています。
やりすぎてパフォーマンス劣化とか、足りなくて攻撃を受けてしまうとか。

スペシャリストが対策しても抜け穴が残ってたりもするような分野ですし、こうしていれば絶対安心とかってことにはならないですね。
一般的なWEBサービスであれば、こういう攻撃受けたら致命的だな、と思う箇所に重点的に対策を施し、他は一般的に必要だと言われている対策をやっていれば、まあそれほど大きな問題にはならないかなと。

私見です。

投稿2018/09/09 01:46

spookybird

総合スコア1803

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

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

yayak

2018/09/09 17:47

ありがとうございます。やはりバランスの問題なのですね。大事なところはしっかり、その他も基本に忠実にセキュリティ対策していこうと思います。 ご回答、感謝申し上げます。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問