web-dev-qa-db-ja.com

ショートコードタグとして許可されている文字は何ですか?また、それらをどのようにサニタイズする必要がありますか?

私はユーザーが自分自身でショートコードタグを定義できるプラグインに取り組んでいます。あなたはそこに許可するために何を提案しますか?私の考えはアスキー文字だけを許可することです。

じゃあどうやって消毒するの? strip_tagsに続いてa-z, 0-9のみを許可するように正規表現しますか、それとももっと良い解決策がありますか? WordPressにはそれに対するフィルタがありますか? WordPressがナメクジのために使用するフィルタを使用できますか?

とにかく1つのASCII文字がなければならない場合は私はちょうど3を必要とする場合、私はこれをやるでしょう答えのおかげで。

foreach ( $shortcodes as $key => $var ) {

$var = preg_replace('/[^a-z0-9_]/', '', $var ); // strip away everything except a-z,0-9 underscore

if ( strlen($var) < 3 )
    continue; // if less then 3 chars AFTER the strip don't save
5
amy

ほとんどすべての文字を使用できます。 /という文字だけが危険です。許可しないでください。 WordPressはショートコード名をエスケープするために preg_quote を使用していますが、それを行う際に独自の正規表現区切り文字/は含まれていません。そのため、ショートコードは適切にエスケープされず、PHP警告が表示されます。

それ以外にも、ショートコード名には2つの基本的な規則があります。

  1. 2文字以上にしてください。
  2. 少なくとも1つのUS-ASCII文字(a-z0-9)を含める必要があります。

だからこれは動作します:

foreach ( array ( '.-o', ']b', 'äoß', 'o"o', "o'o", '❤m' ) as $shortcode )
{
    add_shortcode( $shortcode, 't5_crazy_shortcode_handler' );
}

function t5_crazy_shortcode_handler( $attrs = array(), $content = NULL, $shortcode )
{
    return "<pre>\$shortcode: $shortcode\n\n\$attrs\n"
        . htmlspecialchars( print_r( $attrs, TRUE ) )
        . "\n\n\$content"
        . htmlspecialchars( print_r( $content, TRUE ) )
        . '</pre>';
}
1
fuxia

WordPressには ハイフンを含むshortcodesタグに関するいくつかの問題があります なので、おそらくそれを避けたいと思うでしょう。これがまだWP 3.3.xの問題であるかどうかわからない。

WPの wp-includes/format.php ファイルにある 'sanitize'関数のほとんどは(sanitize_titleのように)あなたが必要とするものと同じように動作しますが、それらはハイフンを許可します。ハイフンではなく、英数字のみを返したい場合は、おそらく文字列を取り、スペースを削除するためにpreg_replaceを使用し、英数字のみを実行する関数を書くほうがよいでしょう。 Shortcode APIがshortcodeタグ内の問題を抱えているようには見えないので、スペースをアンダースコアに置き換えることができます。

3
Jeremy