web-dev-qa-db-ja.com

$ wpdbがget_resultsからエスケープされている

私は答えがここにないと思いますが、確かめたかったのです。 get_resultsを使用してデータベースオブジェクトまたはデータベース配列を取得するときに、出力をHTMLに配置するときにhtmlspecialchars()またはesc_html()を追加する必要があることが予想されます。私はこの関数を見ましたが、get_results関数が使用する関数を見つけることなしには明確ではありません(そして私がどれだけ深く掘り下げる必要があるのか​​わかりません)。この質問は、もう1つ非常に小さな他の質問を引き起こします。一般的なhtmlspecialchars()に対してWordPress関数esc_html()を使用する理由は何ですか?

1
tim92109

答えは次のとおりです。もちろんそうではありません。そうでなければ、それらをDBに保存するために使用することはできません。

しかし、...あなたの質問に対する答えはそれほど簡単ではありません。

サニタイズ は、DBに格納するためのデータを準備するプロセスです。したがって、たとえばpost_nameに不正な文字を挿入した場合、それは削除されるため、保存する前にpost_nameはサニタイズされます。カスタマイザでカラーピッカーを使用する場合は、保存する前にサニタイズする必要があります(実際に色であり、ランダムな文字列ではないかどうかを確認します)。等々。

しかし、サニタイズされたデータは依然として危険です。タイトルに「>」文字を使用できるので、それを含むタイトルはサニタイズされます。しかし、もちろんあなたのコードをHTMLで印刷することはできません。

それが エスケープ がゲームに参加する場所です。エスケープは、DBからのデータをHTMLコードに対して(コンテキストに基づいて)安全にするプロセスです。 html属性として使用する場合(esc_htmlを使用する必要があります)などではなく、タグの内側に印刷する場合(同じ場合はesc_attrを使用する場合)、同じタイトルを別の方法でエスケープする必要があります。

そうです - あなたはそれをDBに保存する前にあなたのデータを常にサニタイズし、常に与えられたコンテキストに基づいてエスケープする正しい方法を使うべきです。

0