XSS対策の見直し #23

Open
opened 2023-10-10 12:38:11 +09:00 by kenmo-melon · 3 comments
First-time contributor

https://qiita.com/tadsan/items/50070788f4ef0dd8e8b5
この記事を読んで思ったのですがいくつかの項目をきちんと点検したほうが良さそうです

  • subject.txtの生成時のエスケープ処理
  • datのエスケープ処理
  • Web版のエスケープ処理
  • <?php echoを使っている箇所すべてでのエスケープ処理
https://qiita.com/tadsan/items/50070788f4ef0dd8e8b5 この記事を読んで思ったのですがいくつかの項目をきちんと点検したほうが良さそうです - [ ] `subject.txt`の生成時のエスケープ処理 - [ ] `dat`のエスケープ処理 - [ ] Web版のエスケープ処理 - [ ] `<?php echo`を使っている箇所すべてでのエスケープ処理
Contributor

XSS対策としてpostDataのエスケープ処理について再確認してみました。
また、各postDataについて異なるエスケープ処理をすると可読性が低下したり処理漏れの恐れがあると判断し、処理を関数で一本化しました。
修正後のコードは以下の通りです。
1ab9ad67fb/test/bbs-main.php (L72-L113)

以降、各ファイルのエスケープ処理についての再確認作業の記録です。

エスケープ処理すべきpostDataについて

利用者が自由に入力可能な以下の4種です。
それぞれ、スレタイ、名前、メール欄、本文を表します。

  • $_POST['title']
  • $_POST['name']
  • $_POST['mail']
  • $_POST['comment']

どのようにエスケープ処理すべきか

HTMLエスケープが必要です。
datファイルでは<及び>をエスケープ処理すべきですがHTMLエスケープにより自然と達成されます。
index.jsonやsubject.jsonはJSON用のエスケープ処理が必要ですがjson_encodeにより達成されます。

各ファイルについて再確認

$THREADFILE

ブラウザ表示用のdatファイルです。
$_POST['title'], $_POST['name'], $_POST['comment']が使用されます。$_POST['mail']は削除されます。
HTMLエスケープされています。

DATFILE

専ブラ用のdatファイルです。$THREADFILEと同内容です。

index.json

TL用のファイルです。
$_POST['title'], $_POST['name'], $_POST['comment']が使用されます。$_POST['mail']は削除されます。
HTMLエスケープされています。
json_encodeによりJSONエスケープされています。

subject.json

スレタイ一覧用のファイルです。
$_POST['title']が使用されます。
HTMLエスケープされています。
json_encodeによりJSONエスケープされています。

subject.txt

専ブラ用スレタイ一覧用のファイルです。
$_POST['title']が使用されます。
HTMLエスケープされています。

結論

この修正により既知のXSSに対しては対策が取れていると思われます。
何か再修正点等あればご指摘お願いします。

XSS対策としてpostDataのエスケープ処理について再確認してみました。 また、各postDataについて異なるエスケープ処理をすると可読性が低下したり処理漏れの恐れがあると判断し、処理を関数で一本化しました。 修正後のコードは以下の通りです。 https://git.3chan.cc/konkon-fox/delightly-v2fork/src/commit/1ab9ad67fb10c301626922e64c5816ffeec8c02f/test/bbs-main.php#L72-L113 以降、各ファイルのエスケープ処理についての再確認作業の記録です。 ### エスケープ処理すべきpostDataについて 利用者が自由に入力可能な以下の4種です。 それぞれ、スレタイ、名前、メール欄、本文を表します。 - \$_POST['title'] - \$_POST['name'] - \$_POST['mail'] - \$_POST['comment'] ### どのようにエスケープ処理すべきか HTMLエスケープが必要です。 datファイルでは\<及び\>をエスケープ処理すべきですがHTMLエスケープにより自然と達成されます。 index.jsonやsubject.jsonはJSON用のエスケープ処理が必要ですがjson_encodeにより達成されます。 ### 各ファイルについて再確認 #### \$THREADFILE ブラウザ表示用のdatファイルです。 \$_POST['title'], \$_POST['name'], \$_POST['comment']が使用されます。\$_POST['mail']は削除されます。 HTMLエスケープされています。 #### DATFILE 専ブラ用のdatファイルです。\$THREADFILEと同内容です。 #### index.json TL用のファイルです。 \$_POST['title'], \$_POST['name'], \$_POST['comment']が使用されます。\$_POST['mail']は削除されます。 HTMLエスケープされています。 json_encodeによりJSONエスケープされています。 #### subject.json スレタイ一覧用のファイルです。 \$_POST['title']が使用されます。 HTMLエスケープされています。 json_encodeによりJSONエスケープされています。 #### subject.txt 専ブラ用スレタイ一覧用のファイルです。 \$_POST['title']が使用されます。 HTMLエスケープされています。 ### 結論 この修正により既知のXSSに対しては対策が取れていると思われます。 何か再修正点等あればご指摘お願いします。
Author
First-time contributor

おおお!素早い対応ありがとうございます!後で時間がとれた時に確認しておきます。コメントしやすいようにプルリクエストにしてもらっても大丈夫でしょうか?

おおお!素早い対応ありがとうございます!後で時間がとれた時に確認しておきます。コメントしやすいようにプルリクエストにしてもらっても大丈夫でしょうか?
Contributor

プルリクエストを行いました。#24
!addコマンドの修正等も混ざっていて分かりにくいかと思いますがご確認いただけると助かります。参考:#1
あまりgitを使ったことがないので何か誤った点などがあれば教えていただけると幸いです。

プルリクエストを行いました。https://git.3chan.cc/stat2/delightly-v2fork/pulls/24 !addコマンドの修正等も混ざっていて分かりにくいかと思いますがご確認いただけると助かります。参考:https://git.3chan.cc/stat2/delightly-v2fork/issues/1 あまりgitを使ったことがないので何か誤った点などがあれば教えていただけると幸いです。
Sign in to join this conversation.
No description provided.