XSS対策の見直し #23
Labels
No Label
bug
discussion
documentation
duplicate
enhancement
feature
help wanted
invalid
Priority
High
Priority
Low
Priority
Medium
question
wontfix
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stat2/delightly-v2fork#23
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
https://qiita.com/tadsan/items/50070788f4ef0dd8e8b5
この記事を読んで思ったのですがいくつかの項目をきちんと点検したほうが良さそうです
subject.txt
の生成時のエスケープ処理dat
のエスケープ処理<?php echo
を使っている箇所すべてでのエスケープ処理XSS対策としてpostDataのエスケープ処理について再確認してみました。
また、各postDataについて異なるエスケープ処理をすると可読性が低下したり処理漏れの恐れがあると判断し、処理を関数で一本化しました。
修正後のコードは以下の通りです。
1ab9ad67fb/test/bbs-main.php (L72-L113)
以降、各ファイルのエスケープ処理についての再確認作業の記録です。
エスケープ処理すべきpostDataについて
利用者が自由に入力可能な以下の4種です。
それぞれ、スレタイ、名前、メール欄、本文を表します。
どのようにエスケープ処理すべきか
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に対しては対策が取れていると思われます。
何か再修正点等あればご指摘お願いします。
おおお!素早い対応ありがとうございます!後で時間がとれた時に確認しておきます。コメントしやすいようにプルリクエストにしてもらっても大丈夫でしょうか?
プルリクエストを行いました。#24
!addコマンドの修正等も混ざっていて分かりにくいかと思いますがご確認いただけると助かります。参考:#1
あまりgitを使ったことがないので何か誤った点などがあれば教えていただけると幸いです。