17

HTML Purifierを使用して、ユーザーが入力した文字列(人の名前を表す)が確実にサニタイズされるようにすることを検討しています。

HTMLタグ、スクリプト、マークアップなどを許可したくありません。英数字、通常の句読文字だけが必要です。

HTML Purifierで利用できるオプションの数は非常に多く、私が見る限り、ドキュメントには始まり/中間または終わりがないようです。

参照: http: //htmlpurifier.org/docs

文字列をサニタイズしてすべての悪いものを削除する方法を示す、HTMLPurifierの簡単なHelloWorldチュートリアルはオンラインにありますか。

ストリップタグの使用も検討しています。

またはPHPの組み込みデータサニタイズ

4

10 に答える 10

9

私はリッチテキストエディターの出力をサニタイズするためにHTMLPurifierを使用してきましたが、最終的には次のようになりました。

include_once('htmlpurifier/library/HTMLPurifier.auto.php');

$config = HTMLPurifier_Config::createDefault();
$config->set('Core', 'Encoding', 'UTF-8');
$config->set('HTML', 'Doctype', 'HTML 4.01 Transitional');

if (defined('PURIFIER_CACHE')) {
    $config->set('Cache', 'SerializerPath', PURIFIER_CACHE);
} else {
    # Disable the cache entirely
    $config->set('Cache', 'DefinitionImpl', null);
}

# Help out the Purifier a bit, until it develops this functionality
while (($cleaner = preg_replace('!<(em|strong)>(\s*)</\1>!', '$2', $input)) != $input) {
    $input = $cleaner;
}

$filter = new HTMLPurifier($config);
$output = $filter->purify($input);

主な関心事:

  1. オートローダーを含めます。
  2. HTMLPurifier_Configasのインスタンスを作成します$config
  3. 必要に応じて、を使用して構成設定を設定します$config->set()
  4. のインスタンスを作成し、それHTMLPurifierに渡します$config
  5. 入力に使用$filter->purify()します。

ただし、出力でHTMLを許可する必要がないものには完全にやり過ぎです。

于 2011-10-19T22:41:32.027 に答える
0

コンテンツに基づいて入力検証を行う必要があります-たとえば、名前に正規表現を使用します

'/([A-Z][a-z]+[ ]?)+/' //ascii only, but not problematic to extend

この検証はうまくいくはずです。次に、出力をページに印刷するときに、優先htmlspecialcharsを使用して出力をエスケープします。

于 2010-04-27T08:12:05.683 に答える
0

htmlspecialchars()のようなものを使用して、ブラウザが解釈せずにユーザーが入力した文字を保持できます。

于 2010-04-30T11:33:36.570 に答える
0

Codeigniterのxssクリーニングクラスはかなり良いといつも思っていましたが、最近ではコハナに目を向けました。

xss_cleanメソッドを見てください

http://github.com/kohana/core/blob/c443c44922ef13421f4a3af5b414e19091bbdce9/classes/kohana/security.php

于 2010-08-16T16:39:06.353 に答える
0

動作中のHTMLpurifier。書き込みと書き込み<?php echo "HELLO";?>を選択して、出力を確認できます。 fnameWORLDlname

<?php
include( 'htmlpurifier/htmlpurifier/library/HTMLPurifier.auto.php');
?>
<form method="post">
<input type="text" name="fname" placeholder="first name"><br>
<input type="text" name="lname" placeholder="last name"><br>
<input type="submit" name="submit" value="submit">
</form>
        
<?php
if(isset($_POST['submit']))
{
    $fname=$_POST['fname'];
    $lname=$_POST['lname'];
    
    $config = HTMLPurifier_Config::createDefault();
    $purifier = new HTMLPurifier($config);
    $fname = $purifier->purify($fname);
    
    $config = HTMLPurifier_Config::createDefault();
    $purifier = new HTMLPurifier($config);
    $lname = $purifier->purify($lname);

    echo "First name is: ".$fname."<br>";
    echo "Last name is: ".$lname;
}

于 2018-09-26T14:21:50.433 に答える
-1

簡単にするために、を使用するか、<、> 、strip_tags()および&のオカレンスをそれぞれ、、、およびに置き換えることができます。これは間違いなく最善の解決策ではありませんが、最速です。&lt;&gt;&amp;

于 2010-05-24T10:59:39.407 に答える
-1

文字列から英数字以外のすべての文字を削除する最も簡単な方法は、次のようにRegEx.Replace()を使用することです。

Regex.Replace(stringToCleanUp、 "[\ W]"、 "");

\ w(小文字)は任意の「単語」文字に一致しますが、[a-zA-Z0-9_]と同等です。\Wは任意の「非単語」文字に一致します。\wと一致しないもの。上記のコードは\W(大文字)を使用し、結果を何も置き換えません。

別の方法として、アンダースコアを許可したくない場合は、次のように[^a-zA-Z0-9]を使用できます。

Regex.Replace(stringToCleanUp、 "[^ a-zA-Z0-9]"、 "");

于 2010-04-21T08:39:23.253 に答える
-1

コードインジェクション攻撃を回避しようとしている場合は、データをスケープし、ユーザーが入力したように保存して印刷するだけです。

例:MySQLでのSQLインジェクションの問題を回避したい場合は、mysql_real_escape_string()関数などを使用してSQL文をサニタイズします。*

別の例:HTMLドキュメントにデータを書き込み、でデータを解析しhtml_entities()ます。これにより、データはユーザーが入力したように表示されます。

于 2010-04-29T16:11:12.883 に答える
-2

私は通常、データベースに送信する前に、次のようにすべてのユーザー入力をクリーンアップします

mysql_reql_escape_string( htmlentities( strip_tags($str) ));
于 2010-05-17T17:04:58.053 に答える
-2

これは一週間前に見つかりました...それが大好きです。

「PHP5+で記述された単純なPHPHTMLDOMパーサーは、無効なHTMLをサポートし、HTML要素を処理する非常に簡単な方法を提供します。」 http://simplehtmldom.sourceforge.net/

// Example
$html = str_get_html("<div>foo <b>bar</b></div>");
$e = $html->find("div", 0);

echo $e->tag; // Returns: " div"
echo $e->outertext; // Returns: " <div>foo <b>bar</b></div>"
echo $e->innertext; // Returns: " foo <b>bar</b>"
echo $e->plaintext; // Returns: " foo bar"

ループして個々のタグなどを削除することもできます。ドキュメントと例は非常に優れています...かなりの数の場所で簡単に使用できることがわかりました。:-)

于 2010-05-27T01:05:26.927 に答える