1

ユーザーが設定ページにCSSを入力して、ユーザーページのCSSを変更する方法を提供しています。HTMLは次のとおりです。

<textarea class="code" name="Settings[css]"></textarea>

コントローラ内:

$model = new Profile;
$model->css = $_POST['Settings']['css'];

現在、CSSフィールドの入力を検証していません。CSSをフィルタリングして、有害なコードをページに挿入できないようにできるかどうか疑問に思いました。たとえば、次のことができます。

</style>
Now I can put bad code in to your page

CSSには通常特殊文字が含まれているため、HTMLpurifierを使用してcssを精製することは適切ではないと思いますが、間違っている場合は修正してください。

ありがとう

4

3 に答える 3

2

これは、どのような形のYiiとも関係ありません。

ユーザーCSSを外部ファイルとして含めると、例で提供した「無効なコード」を簡単に削除できます。

そして、CSSでできることはそれだけではありません。次のエントリを手動で削除する必要があります。

  • を含む行behavior: url( .. )
  • !importantが使用されるすべてのインスタンス
  • #adsおよびなどの特定のIDへのセレクターを含むエントリ#logo
于 2012-04-22T10:11:37.697 に答える
1

次のようなphpcssパーサーを試すことができます。

https://github.com/sabberworm/PHP-CSS-Parser

しかし、それが生成するコードの品質や、入力に関する問題の処理方法については何も言えません。

私が知っていることは、LESSは通常優れたデバッグ機能を備えているということです。

LESS phpクラスを使用$_POST['Settings']['css']すると、有効なCSSを作成するために使用されるシステムを構築できます。または、エラーが発生した場合は、それらをキャッチしてブラウザに返すことができます。

はい、これにより、フィールドでLESS構文を効果的に使用できるようになりますが、その害は見られません。LESSは、CSSの構文がいくつかの点で厳密であり、リストの最後のプロパティや余分な文字もエラーを引き起こす可能性があるかどうかに関係なく、セミコロンが必要です。

javascriptバージョンのデバッグ情報はかなりしっかりしていますが、私はJSしか使用していないため、PHPクラスを個人的に保証することはできませんが、JSに次ぐ2番目に良いと聞いています。

于 2012-04-22T10:08:17.500 に答える
1

strip_tags()入力からhtmlタグを削除できますが、心配する必要があるのはそれだけではないと思います。

より簡単な解決策は、インラインスタイルブロックの代わりに外部スタイルシート(<link rel="stylesheet" type="text/css" href="userstyle.php?uid=1235" />)を介してこのスタイルをロードすることです。そうすれば、抜け出す方法がありません。

于 2012-04-22T10:11:57.027 に答える