1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHP のフィルタ型 FILTER_SANITIZE_STRING、FILTER_SANITIZE_SPECIAL_CHARS、FILTER_SANITIZE_FULL_SPECIAL_CHARS の違い

Posted at

PHP で値を検証したいとき、filter 関数(filter_var や filter_input 関数)を使用すると簡単に値を検証できます。この記事は、filter 系関数に指定するフィルタ型についてのメモです。

FILTER_SANITIZE_STRING、FILTER_SANITIZE_SPECIAL_CHARS、FILTER_SANITIZE_FULL_SPECIAL_CHARS の違い

覚えてしまえば簡単だとは思いますが、私は覚えが悪いのでメモです(アウトプットすると覚えられる気がする)。

以下のコードの出力結果は…

<?php
$var = '<script>alert("XSS");</script>';

var_dump(filter_var($var, FILTER_SANITIZE_STRING));
var_dump(filter_var($var, FILTER_SANITIZE_SPECIAL_CHARS));
var_dump(filter_var($var, FILTER_SANITIZE_FULL_SPECIAL_CHARS));

このようになります。

string(21) "alert(&#34;XSS&#34;);"
string(54) "&#60;script&#62;alert(&#34;XSS&#34;);&#60;/script&#62;"
string(52) "&lt;script&gt;alert(&quot;XSS&quot;);&lt;/script&gt;"

結果から分かるように、違いは以下のようになります。

|ID|説明|
|---|---|---|
|FILTER_SANITIZE_STRING|タグを取り除く。オプションで、 特殊文字を取り除いたりエンコードしたりする|
|FILTER_SANITIZE_SPECIAL_CHARS|'"<>& および ASCII 値が 32 未満の文字を HTML エスケープする。オプションで、 特殊文字を取り除いたりエンコードしたりする|
|FILTER_SANITIZE_FULL_SPECIAL_CHARS|htmlspecialchars() に ENT_QUOTES を指定してコールするのと同じ|

より詳しい仕様などは PHP マニュアルの「フィルタの型」をご覧ください。

終わり

私のような雑魚い頭的には「FILTER_SANITIZE_FULL_SPECIAL_CHARS を指定しておけばいい」という感じですかね(笑)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?