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

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

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

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

解決済

AWS上のWebシステムへのファイルアップロード時にAWS WAFでブロックされる。

august
august

総合スコア8

JavaScript

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

2回答

0グッド

1クリップ

488閲覧

投稿2022/11/22 06:22

編集2022/11/23 01:54

前提

これまでイントラ内で運用していたWebシステムをAWS上に持っていくとこのことで挙動を見ています。
ファイルをアップロードする処理を実行した際に、AWS WAFの検知ルールに引っかかっており対応が必要な状態です。
クライアント側でファイルをアップロードする処理でのXSS対策はどの様な実装になるのかご教授頂きたいです。

■対象ルール
CrossSiteScripting_BODY

実現したいこと

ファイルのアップロードを行いたい。

該当のソースコード

js

1var xhr = new XMLHttpRequest(); 2var form = document.getElementById('uploadFile'); 3var formData = new FormData(form); 4formData.append('fileName', document.getElementById('fileName').value); 5formData.append('filePath', document.getElementById('filePath').value); 6xhr.open('POST', 'サーバー側のURL', true); 7xhr.send(formData);

試したこと

正常にアップロードできるファイルと、できないファイルがあります。
そもそもリクエストがAWS WAFによってサーバー側の処理まで届いて居ないようなので
クライアント側で何かしらする必要があると思っており

調べてみるとサニタイズが必要とのことですが、fileName, filePathのサニタイズでは解決せず。
uploadFile自体をサニタイズ?するのかいまいちよくわかってないです。

追記

WAF側のログを確認したところ、以下の問題があるとのことでした
リクエストボディに格納されているファイルのメタ情報が引っかかるようですがこの場合はどのような対応が必要となるのでしょうか。

json

1 "terminatingRuleMatchDetails": [ 2 { 3 "conditionType": "XSS", 4 "location": "BODY", 5 "matchedData": ["xmlns:x", "adobe:ns:meta/"] 6 } 7 ],

以下のような質問にはグッドを送りましょう

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

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

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

yu_1985

2022/11/22 07:35

素直に考えたらファイル名とかパスだけでなく、送っているデータの全量に対してチェックがかかるはずです。 WAFにブロックされたリクエストの中身をログからより詳細に調べてみてはどうでしょうか。

回答2

1

調べるとAWSのBlogに下記のようなものがあります。
AWS WAF によってブロックされているファイルをアップロードするにはどうすればよいですか?

結局の所、セキュリティを損ねないレベルで個別に除外するしかないと思います。
具体的な方法は要件に照らし合わせて考えてみてください。

投稿2022/11/23 08:50

yu_1985

総合スコア7072

ockeghem👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

自己解決

今回はAWS WAF側のブロックルールを変更し対応を行いました。

プログラムにて対応を行う場合については以下の様な方法があるそうで
参考:AWS WAF Getting 403 forbidden error while trying to upload an image

ファイルを読み込んだメタデータを含むBlobはJavascript側で変更ができない仕様なので
base64変換した文字列として送る形になるようでした。

Blobの分割はできるみたいですが
分割対象の位置が対象の部分でない場合には意味がなさそうなので今回は深掘りしていません。

投稿2022/11/24 01:40

編集2022/11/24 01:41
august

総合スコア8

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

JavaScript

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。