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

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

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

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

Q&A

解決済

2回答

6587閲覧

OWASP ZAPによるCakePHP3アプリケーションの診断について

TakuyaHidaka

総合スコア137

PHP

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

0グッド

2クリップ

投稿2017/05/23 04:03

表題の件ですが、現在CakePHP3でアプリケーションの開発を行なっています。
作成した機能について、セキュリティ診断ツールとしてOWASP ZAPを使用しています。

その際、以下のようなエラーが発生しており、対処法について困っております。

Medium書式文字列エラー
DescriptionA Format String error occurs when the submitted data of an input string is evaluated as a command by the application.
URLhttp://xxx.xxx.xxx.xxx/aplication/hoge
MethodPOST
Parameter_method
AttackZAP %1!s%2!s%3!s%4!s%5!s%6!s%7!s%8!s%9!s%10!s%11!s%12!s%13!s%14!s%15!s%16!s%17!s%18!s%19!s%20!s%21!n%22!n%23!n%24!n%25!n%26!n%27!n%28!n%29!n%30!n%31!n%32!n%33!n%34!n%35!n%36!n%37!n%38!n%39!n%40!n
・・・・・
Instances25
SolutionRewrite the background program using proper deletion of bad character strings. This will require a recompile of the background executable.
Other informationPotential Format String Error. The script closed the connection on a microsoft format string error

書式文字列エラーについて、攻撃に使用されたパラメータを実際にコードに組み込んで動作を確認したところ、
攻撃による不正な動作はなく、DB登録の時に型が合わないなどで例外を投げて終了されます。

  • このような現状で、CakePHP3を用いたプログラムでは

「%1!s%2!s%3!s%4!s%5!s%6!s%7!s%8!s%9!s%10!s%11!s%12!s%13!s%14!s%15!s%16!s%17!s%18!s%19!s%20!s%21!n%22!n%23!n%24!n%25!n%26!n%27!n%28!n%29!n%30!n%31!n%32!n%33!n%34!n%35!n%36!n%37!n%38!n%39!n%40!n」のような入力値に対して、しっかりと対応されていると言って良いのでしょうか?

  • また対応されているならば、OWASPでエラーが生じる原因は何か?

  • 対応されているとは言えない場合は、どのようにプログラムを修正すれば良いか?

どなたかお詳しい方がいらっしゃいましたら、これらに回答していただけないでしょうか?
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

本当に書式文字列攻撃に脆弱なのでしょうか? パラメータ名は _method ということですから、書式の可能性もなくはないですが、違うような気がします。
バリデーションを行う歳の基本は、アプリケーションとして受け入れる書式や文字種としてどうかということです。たとえば、本当に書式文字列攻撃なのであれば、パラメータ _methodは %10d などの書式の形式になっているはずですが、そうなっていますか?
「書式文字列攻撃を防ぐためのバリデーションの掛け方」というのは簡単ではありません。本来どのようなパラメータがくる「はず」なのかを示していただくか、該当する箇所のソースコードを教えていただかないと、回答は難しいです。

投稿2017/05/23 11:41

ockeghem

総合スコア11705

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

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

TakuyaHidaka

2017/05/24 00:51 編集

CakePHP3における "_method" は、「GET/POST/DELETE/PUT」などのHTTPメソッドを指すパラメータです。 CakePHP3が出力したログを確認すると、該当箇所について「そのようなHTTPメソッドは存在しません。」とありました。 なお、他のフォームから入力された画面項目のパラメータに、攻撃文字列を入力して画面に出力したところ、'%'などもエスケープされて表示されました。 このような攻撃文字列に対してPHP側がすでに対応されているという記事もネットで何件かありました。 結局のところ、PHPにおいて書式文字列攻撃への対応は必要なのかどうか、お聞きしたいと思いました。もし必要なら、どのような場面で必要なのかをお教え願えますか?
ockeghem

2017/05/24 04:05

文字通り METHOD を示すのですね。 > CakePHP3が出力したログを確認すると、該当箇所について「そのようなHTTPメソッドは存在しません。」とありました。 つまり、CakePHP3が、_methodパラメータをバリデーションしてエラーにしているわけで、それ以上のバリデーションは不要でしょう。これはOWASP Zapの誤検知でしょうね。 > 結局のところ、PHPにおいて書式文字列攻撃への対応は必要なのかどうか、お聞きしたいと思いました アプリケーション次第です。書式を外部から指定しなければ(指定できるようにしなければ)、書式文字列攻撃を気にする必要はありません
TakuyaHidaka

2017/05/24 07:29

大変参考になりました。 ネットで調べるには情報が少なくてとても助かりました。 ベストアンサーにいたします。 これからもよろしくお願いします!
guest

0

例外を投げて終了と言う事で、「攻撃文字列を投げ込んだら、攻撃と理解せずに処理された」と判断されているのでしょう。
入力文字が不正だというエラーを返して再入力を促す等すればよいのでは。

と言うか、Solutionのところで似たような事書かれてると思うのですが。

投稿2017/05/23 04:55

kunai

総合スコア5405

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

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

TakuyaHidaka

2017/05/23 05:45

ご回答いただきありがとうございます。 それでは、攻撃文字列を投げて例外が投げられたということは、バリデーションを組むことになると思います。上記の攻撃文字列の場合、どのようなバリデーションを組む方が良いかをお教えいただけませんか? 書式文字列攻撃を防ぐためのバリデーションの掛け方がわからないのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問