0

現在、次の関数を使用して文字列を保護しています:

  function secure($data)
  {
    $data = trim($data);
    $data = htmlspecialchars($data);
    $data = str_replace("'", '"', $data);
    $search = array(chr(0xC2).chr(0xA0),chr(0xC2).chr(0x90),
                              chr(0xC2).chr(0x9D),chr(0xC2).chr(0x81),
                              chr(0xC2).chr(0x8D),chr(0xC2).chr(0x8F),
                              chr(0xC2).chr(0xAD),chr(0xAD));
    $data = str_replace($search, "", $data);
    return $data;
  }

この関数は文字列を保護するのに十分でしょうか?

に挿入する文字列を保護し、 のMySQLようなバグを防ぐために、どの方法を使用XSSしますHTML pageか?

4

5 に答える 5

3

必要なのは PDO だけです。プリペアド ステートメントとストアド プロシージャ

コードから JavaScript を削除したい場合

  • htmlpurifierを見てください。

  • 正規表現を使用:$html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html);

  • またはDOMDocumentを使用

    $doc = new DOMDocument();
    $doc->loadHTML($html); // load the HTML string we want to strip
    
    $script_tags = $doc->getElementsByTagName('script'); // get all the script tags
    
    $length = $script_tags->length;
    
    for ($i = 0; $i < $length; $i++) {
      $script_tags->item(0)->parentNode->removeChild($script_tags->item(0)); // for each tag, remove it from the DOM
    
    }
    
    $no_script_html_string = $doc->saveHTML(); // get the HTML string back
    
于 2012-07-27T14:07:34.237 に答える
2

あなたは2つの異なる技術で遊んでいますが、どちらも別々の消毒方法を必要とします。

MySQLには、SQLインジェクションからの保護が必要です。最も一般的には、引用符を分割し、数値フィールドに非数値型を入力します。この場合の文字列変数は、いくつかの方法で保護できます。プリペアドステートメントを使用すると、間違いなく役立ちます。mysql_real_escape_string()、などのメソッドは、との組み合わせが整数に役立つmysqli_real_escape_string()個々の文字列変数をサニタイズできます。変数ごとのレベルでサニタイズしたい場合は、すべて入力によって異なります。プリペアドステートメントは、ステートメント/変数レベルで実行することにより、より寛大になります。is_numeric()intval()

一方、XSSは完全に別の獣です。htmlentities()およびなどの方法はhtmlspecialchars()、データを出力するときに役立ちますが、データが出力されるコンテキストにも大きく依存します。などのデータを出力する場合は<span><?=$variable;?></span>、これらの関数のいずれかが役立ちます。しかし、のようなものはし<a href="<?=$variable;?>">ません。

XSS防止の詳細については、OWASPのXSS(クロスサイトスクリプティング)防止に関するチートシートから始めてください。

于 2012-07-27T14:12:57.513 に答える
1

SQLインジェクションから保護するための最良の方法は、パラメーター化されたクエリを使用することです。また、XSSに対しては、HTML Purifier http://htmlpurifier.org/と呼ばれる非常に優れたライブラリ(PHP)を使用でき ます。

于 2012-07-27T14:12:03.957 に答える
1

「文字列を保護する」と言うのは、出力のことを意味していると思いますか?

DB 出力 (SELECT クエリで使用される変数を含む) の場合は、*_escape_string 関数を使用するか、PDO オブジェクトで準備済みステートメントを使用することをお勧めします。

HTML出力には、 htmlspecialcharsではなくhtmlentitiesを使用する必要があります

さらに、入力からシェル コマンドを実行する場合は、 escapeshellargescapeshellcmdを使用します。

于 2012-07-27T14:14:12.587 に答える
-3

あなたが知る必要がある唯一の方法は: addslashes:)

于 2012-07-27T14:06:26.843 に答える