postDataのエスケープ処理方法等の修正 #24
No reviewers
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
3 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stat2/delightly-v2fork#24
Loading…
Reference in New Issue
No description provided.
Delete Branch "konkon-fox/delightly-v2fork:main"
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?
大きな変更点は以下の通りです。
複数の変更点が混ざっていて申し訳ないですがご確認いただけると助かります。
issueの方にも修正点の説明があります。
#23 (comment)
#1 (comment)
WIP: mainto WIP: postDataのエスケープ処理方法等の修正ありがとうございます!とりあえずこれでいいと思います。
</b><b>
は気になりますね?どういう意図だったんでしょう。@ -856,7 +862,7 @@ fclose($fp);
}
// レス情報を本文末尾に追加
if ($M) $_POST['comment'] .= '<br><font color="gray"><small>['.$M.']</small></font>';
これ本文末尾にワッチョイ追加してるってことですか?
ワッチョイや新規表示等の回線情報をまとめて本文末尾に追加する処理ですね。
存在理由が不明かつ不要だと判断したので削除しました。
削除の代わりに名前欄に追加するようにしてあります。それがワッチョイ等の自然な位置だと思いますので。
@ -100,0 +80,4 @@
$postData = str_replace('"', '"', $postData);
$postData = str_replace("'", ''', $postData);
}else {
// 絵文字等禁止モードなのでhtmlspecialcharsでok
5ちゃんねるのdatだと絵文字escapeされてません?専ブラによっては表示できないとかあるんですかね
今ちらっと見た感じだと5chでは
特に処理されていないように思います。数値文字参照に変換されていますね。ここの部分は厳密に言うと数値文字参照の文字列(F97A;など)をキープするかエスケープ処理するかという分岐ですね。
再確認して気づきましたがこのままだと絵文字や特殊記号がエスケープ処理されないのでほぼ意味のない分岐になっています。
else節ではmb_encode_numericentity等で特殊文字を一旦数値文字参照に変換してからエスケープ処理するのが本来すべき処理でしょうか。
要修正項目ですが優先度は高くないかと思いますので今回は見送りという形でどうでしょうか。
※補足ですが現在の絵文字の取り扱いです。
ブラウザ用ファイル(index.json、subject.json、$THREADFILEのdat)は絵文字がそのまま格納されています。
専ブラ用ファイル(subject.txt、$DATFILEのdat)はShift_JISのため絵文字が数値文字参照に変換され格納されています。
@ -174,3 +186,3 @@
// トリップを表示する場合
if ($trip) {
if ((strpos($_POST['name'], '!hide') === false && strpos($_POST['mail'], '!hide') === false && $SETTING['DISABLE_TRIP'] != "checked") || $SETTING['FORCE_DISP_TRIP'] == "checked") $_POST['name'] .= " </b>◆".$trip." <b>";
if ((strpos($_POST['name'], '!hide') === false && strpos($_POST['mail'], '!hide') === false && $SETTING['DISABLE_TRIP'] != "checked") || $SETTING['FORCE_DISP_TRIP'] == "checked") $_POST['name'] .= " <b>◆".$trip." </b>";
これもともとの意図はなんだったんですかね
ただのタイポ?
単純なタイポだと思われます。
大変お恥ずかしい話ですがタイポではなく元のコードが正しいです。
2ch式掲示板の名前欄は太字がデフォルトでトリップ等システムから出力される文字列のみ細字となる仕様です。
ですのでシステムから出力される文字列を<b>の外に出すために元コードのような処理をしているようです。
これは速やかに修正します。
※追記 修正完了しました。
@ -290,3 +302,3 @@
$LOG = file($THREADFILE);
list($n,$m,$d,$message,$subject) = explode("<>", $LOG[0]);
if (strpos($m, substr(md5($_POST['thread'].$HAP['range'].$HAP['provider'].$HAP['CH_UA'].$HAP['ACCEPT']), 0, 5)) !== false) $supervisor = true;
if (strpos($m, substr(md5($_POST['thread'].$HAP['range'].$HAP['provider'].$HAP['CH_UA'].$HAP['ACCEPT']), 0, 8)) !== false) $supervisor = true;
https://www.php.net/manual/ja/function.str-contains.php
この変更とは関係ありませんが、
str_contains
の方が良さそうですね確かに用途としてはstr_containsの方が適していそうですね。
書き換えるにしてもstrposの使用箇所が非常に多いのでまた別の機会に一括で行うべきでしょうか。
あとstr_containsがPHP8以降でしか対応していないのが少し引っかかります。最近のサーバー事情に詳しくないので割合は不明ですがPHP7までしか対応していないサーバーではdelightly自体が使えなくなる、というのは避けたい気もします。
なるほど、はるひさんや農園主さんに聞いてみて大丈夫そうならバージョン上げちゃってもいいと思いますが、とりあえず今回は見送ったほうが良さそうですね。
@ -97,3 +73,1 @@
$_POST['title'] = preg_replace("/&#[xX]0*[aA]([^a-zA-Z0-9]|$)/", "<br>", $_POST['title']);
$_POST['name'] = preg_replace("/�*10([^0-9]|$)/", "", $_POST['name']);
$_POST['name'] = preg_replace("/&#[xX]0*[aA]([^a-zA-Z0-9]|$)/", "", $_POST['name']);
function escapePostData(&$postData, $keepNewLine){
function escapePostData 内での無意味な分岐を削除しました。
これによりHTMLエスケープの処理方法がhtmlspecialcharsに一本化されました。
それに伴い不要なコードを削除しました。
詳細な確認ありがとうございます!絵文字禁止はそんなに優先度高くないと思うので、とりあえず今回はこれでいくのがベターかなと思います。
konkon-fox referenced this pull request2023-10-11 13:30:07 +09:00
WIP: postDataのエスケープ処理方法等の修正to postDataのエスケープ処理方法等の修正kenmo-melonさんにもレビューいただき、大きな問題は無いようなのでWIP: を外しました。
とはいえまだレビューは受け付けますのでphpが読める方はぜひご協力よろしくお願いします。
ありがとうございました!
プルリクエストをマージしました。
プルリクエストのマージ対応ありがとうございます。
今後もバグの修正や機能の追加などの機会があればよろしくお願いします。