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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Q&A

解決済

1回答

990閲覧

wordpressでPOSTを検証

kurazushi

総合スコア43

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

0グッド

0クリップ

投稿2020/10/10 08:10

wordpressで配列を送信されるとき、下記のesc_arrを通せば完璧と思っているのですが、抜け穴というか、この検証に対して問題を見つけることはできますか?

もし問題があるならどういうふうにクリアし安全な検証を実装しますか?

php

1add_action('wp_ajax_test_ajax_1', 'test_ajax_1'); 2function test_ajax_1(){ 3 4 // $argsを検証 5 $args = isset($_POST['args']) ? esc_arr( $_POST['args'] ) : []; 6 7 // $argsを使い、データベースから値を取得し$resultsに入れる 8 $results = []; 9 echo json_encode($results); 10 die(); 11} 12 13function esc_arr( $arr ) { 14 return filter_var( $arr, FILTER_CALLBACK, ["options" => function( $v ) { return esc_html( $v ); }] ); 15}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/10/10 08:20

>wordpressで配列を送信される どういう場面か具体的に提示されたほうが良いかと思います。
m.ts10806

2020/10/10 08:21

あと、調べたり試したりしたこと・・その結果で想定される「問題」があるなら自身が考えたことを提示したほうが良いかと
guest

回答1

0

ベストアンサー

esc_htmlはXSS対策にはなるけどSQLインジェクション対策にはならんと思います
WPでSQLに使う値ならesc_htmlではなくesc_sqlでしょう
(SQL文生成を$wpdb->prepareでやってればesc_sqlも特に必要ないですが・・・)

// $argsを使い、データベースから値を取得し$resultsに入れる

この部分をどうやってるかのほうが問題です

投稿2020/10/12 07:39

KazuhiroHatano

総合スコア7819

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurazushi

2020/10/12 07:44

ご回答ありがとうございます。なるほど細やかなお気遣い痛み入ります。XSS対策が十分とわかってよかったです。SQLインジェクションの方はprepareを使っているのですが、esc sqlというのは知りませんでした。
kurazushi

2020/10/12 07:46

というか、(質問しておいてアレですが)POST値に対してesc_htmlをやる意味はあるでしょうか。必要だと思って実装しましたが、よくよく考えればDBにはesc_htmlを通さずに保存し、出力時にだけesc_htmlをかければいいような気がしてきました。
KazuhiroHatano

2020/10/12 07:58

そうですね、そもそも出力に使うんじゃないならesc_htmlでXSS対策しても意味ないです
kurazushi

2020/10/12 08:24

ご指導ありがとうございます。勘違いしていたので無駄な処理を実装せずに済みそうです。
kurazushi

2020/10/12 08:26

ふと思ったのですが、SQLインジェクションとおなじように、PHPインジェクションのようなものはないのでしょうか。たとえばPOST値にPHPコードが送られたときそれをesc_htmlしなくていいのかという疑問です。
KazuhiroHatano

2020/10/12 08:41

少なくともevalの中ではユーザー入力は完全に文字列として閉じ込められるべきでしょう まずaddslashesが最低限といったところで 尚且つその文字列がどう使われるかといったところにも注意を払うべきです https://www.php.net/manual/ja/function.addslashes.php
kurazushi

2020/10/12 09:28

ありがとうございます。addslashesさえやるつもりがありませんでした。リンク先によく目を通し本番で失敗のないよう気を付けます。
KazuhiroHatano

2020/10/12 09:37

ユーザー入力がPHPの式として評価される箇所に使われること 任意の関数を実行できてしまうことはまず絶対にあってはいけません 特にbase64_decodeの実行を許容してしまうともうなんでもありです addslashesももはやなんの意味もありません https://www.php.net/manual/ja/function.base64-decode.php
kurazushi

2020/10/12 09:47

まるで知らない形式でした。助かりました… これからそれぞれ実装していくにあたって知りたいことがあれば投稿させて頂くかもしれませんが、その際お目に留まりましたらまたよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問