レビュワーの指摘と参照しているコードがちょっと食い違っているような気がしないでもないですが、おそらく本当に問題なのはここじゃないかと思います。
https://github.com/matometaru/Comment-Star-Rating/blob/master/comment-star-rating.php#L292
この $this->text_domain
というプロパティですが、ざっと見ただけですけど特にアクセス権とか指定してないんじゃないですか? これだとこのクラスの外からでも変更可能になって危ないですよ。見たところ固定値のようなので、定数とか使うように変更できないか検討してみてはいかがでしょうか。
Takayuki Miyoshiさん
ありがとうございます!
考えてみると、確かにその通りですね。
他の人が$this->text_domainにアクセスすることを想定しておりませんでした。
定数を宣言していたので、それを使用するように変更いたしました。
こちらで提出してみます。
返事がきました。
$options = $_POST[COMMENT_STAR_RATING_DOMAIN];
// post_type sanitai
foreach ( $post_types as $post_type ) {
if( isset($options[‘post_type’][$post_type]) ) {
$options[‘post_type’][$post_type] = ‘1’;
}
}
That is still wrong.
This is not sanitized: $options = $_POST[COMMENT_STAR_RATING_DOMAIN];
The problem is ANYTHING goes into $options
What is an example VALUE of $_POST[COMMENT_STAR_RATING_DOMAIN] going to be?
if ( !empty($_POST[COMMENT_STAR_RATING_DOMAIN]) ) {
$options = $_POST[COMMENT_STAR_RATING_DOMAIN];
}
>> What is an example VALUE of $_POST[COMMENT_STAR_RATING_DOMAIN] going to be?
$_POSTの値は以下のような可変サイズの配列です。
array (size=3)
'post_type' =>
array (size=2)
'post' => string '1' (length=1)
'page' => string '1' (length=1)
'url' => string '1' (length=1)
'email' => string '1' (length=1)
array (size=2)
'post_type' =>
array (size=1)
'post' => string '1' (length=1)
'url' => string '1' (length=1)
少し分かってきた気がします。
現状は以下の$_POST[‘dummy’]も保存してしまうことが問題ということでしょうか?
(もしそうなら、$optionsに入れる前にunsetやmergeを使って配列から不要なデータを除けばこの件はクリアできそうでしょうか?)
array (size=4)
'post_type' =>
array (size=2)
'post' => string '1' (length=1)
'page' => string '1' (length=1)
'url' => string '1' (length=1)
'email' => string '1' (length=1)
'dummy' => string '1' (length=1)
なにとぞよろしくお願いいたします。
Nora
(@nora0123456789)
保存すべき値をもっと厳選しろという意味じゃないでしょうか?
つまり、最初に「$options」に$_POST[COMMENT_STAR_RATING_DOMAIN]を丸ごと取得してしまっているため、
その後の条件で「”1″」を定義してもしなくても、一度丸ごと取得した部分が精査されていないということだと思います。
ですので、先に取得するなら代替的な変数に先に取得して、
保存する変数「$options」にはもっと保存すべき値を精査すべきということじゃないかと。
$temp = $_POST[COMMENT_STAR_RATING_DOMAIN];
foreach( . . . ) {
if( . . . ) {
$options = sanitize_function( $_POST[...][...] ); // or whatever you want to set
}
}
また、指摘されていることとは異なりますが、カウントが0の場合の「$this->ratings_arrange」の値が定義されていませんので、「d3_init」で定義される変数「dataset」にシンタックスエラーが起きませんか?
的外れでしたら申し訳ありません。
-
この返信は8年、 1ヶ月前に
Noraが編集しました。
-
この返信は8年、 1ヶ月前に
Noraが編集しました。
ありがとうございます。
以下のように修正することができました。
foreach ( $_POST[COMMENT_STAR_RATING_DOMAIN] as $key => $value ) {
if( in_array( $key, $key_array) ){
$key = $key;
}else{
break;
}
$value = '1';
$options += array( $key => $value );
}
>ratings_arrange」の値が定義されていませんので、「d3_init」で定義される変数「dataset」にシンタックスエラーが起きませんか?
こちらについても確認ありがとうございます!
修正いたしました。