0

/ と \ の文字を削除しようとすると問題が発生します。\\ を使用してストリップしようとすると、\ がストリップされますが、/// を試みると、/ がまったくストリップされません。

function stripinname( $text )
{
$text = preg_replace(
    array(
        '/\|/','/\"/','/\</','/\>/','/\s[\s]+/','/^[\-]+/','/[\-]+$/','/\%/','/\\\\/','/\////','/\@/','/\&/','/\:/','/\;/','/\-/',
        '@<head[^>]*?>.*?</head>@siu',
        '@<style[^>]*?>.*?</style>@siu',
        '@<script[^>]*?.*?</script>@siu',
        '@<object[^>]*?.*?</object>@siu',
        '@<embed[^>]*?.*?</embed>@siu',
        '@<applet[^>]*?.*?</applet>@siu',
        '@<noframes[^>]*?.*?</noframes>@siu',
        '@<noscript[^>]*?.*?</noscript>@siu',
        '@<noembed[^>]*?.*?</noembed>@siu',
      // Add line breaks before and after blocks
        '@</?((address)|(blockquote)|(center)|(del))@iu',
        '@</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))@iu',
        '@</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))@iu',
        '@</?((table)|(th)|(td)|(caption))@iu',
        '@</?((form)|(button)|(fieldset)|(legend)|(input))@iu',
        '@</?((label)|(select)|(optgroup)|(option)|(textarea))@iu',
        '@</?((frameset)|(frame)|(iframe))@iu',
    ),
    array(
        ' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',"$0", "$0", "$0", "$0", "$0", "$0","$0", "$0",), $text );

// you can exclude some html tags here, in this case B and A tags        
return strip_tags($text);
}
4

1 に答える 1

2

これをしないでください。

MSIE が を使用した CSS からの JavaScript の読み込みをサポートしていることをご存知behavior:url()ですか? タグjavascript:で URL を実行できることをご存知ですか?<img>

他の誰かの HTML サニタイザーを使用します。HTML Purifierは大丈夫です。多くのユーザーがいて、誰かがバグを見つけると修正され、それを使用しているすべての人が恩恵を受けます。

コードのバグ (私が今見ているものなど) は、見つかった場合にのみ修正されます

私は道を見つけます。

いつもしています。

編集:

あなたのコードが動かないのは、あなたがそれを理解していないからです。このような領域でプログラムを理解していないことが、セキュリティ関連の問題の原因です。あなたは私が「大物のように投稿している」だけだと決めたので、あなたは私のアドバイスを無視しています. そうすることで、ソフトウェア開発者/エンジニア業界全体に不利益をもたらします。

  1. 正規表現を理解していません。,/,スラッシュに一致します。
  2. preg_replace()PHP が実際にどのように正規表現に一致するかを理解していない: すべてのスラッシュに一致させるには、次のようにグローバルに一致させる必要があります。,/,g
  3. /がHTML タグ内に正当に表示されることを理解していません。あなたが持っているように置き換えることで、あなたが取り除こうとしている HTML タグを実際に作成できます。
  4. あなたstrip_tags()は、ブリキに書かれていることをすると思います。そうではありません。
  5. あなたは自分の主張を数え間違えました。あなたが分割していると思っているもののいくつかは、それ自体に置き換えられています。
  6. エラーをチェックしていません。preg_replace()戻ることができNULLます。

あなたはとても傲慢です。スタックオーバーフローについて質問したり、PHP wiki から例をコピーして貼り付けたりするだけで、この素晴らしいギグの秘密をマスターしたと思います。これを停止する必要があります。バグのないプログラムを作成するには、すべての単語を理解する必要があります。その方法を学べるのを喜んでお手伝いしますが、責任を持って行動するよう強く求めなければなりません。

まだ十分に経験のないコードを書くことを避けるための倫理的感覚が必要です。

評判の良い情報源からこの種のルーチンを入手し、他の人の過ちから学びましょう。あなたのクライアント/雇用主/その他はあなたのバグに値しません。私たちの業界は、この種のでたらめに値しません。

于 2012-12-23T19:28:50.577 に答える