6

私は arg(x) がある drupal 7 のインストールに取り組んでいます

http://api.drupal.org/api/drupal/includes!bootstrap.inc/function/arg/7

html出力、ビューテンプレート、その他の場所などで多く使用されています。ドキュメントを見て、このトピックについて検索しましたが、argの出力をサニタイズ/エスケープする必要があるかどうかについてはまだ混乱しています(x) php の htmlspecialchars または drupal の check_plain などを使用して xss を防止します。

4

1 に答える 1

3

技術的には、私のテストによると、エスケープする必要があります。しかし、良い面はarg()、直接のユーザー入力を常に使用するわけではないということです。

URL (より正確には$_GET['q']) がの場合、チェックなしnode/<h3>/editarg(1)返されます。<h3>自分でテストしたい場合は、以下のスニペットを追加して自分で確認してください。

<?php
echo (arg(1, 'node/<h3>/edit')); ?>Normal text 

h3 に「通常のテキスト」が表示されます。

ノードの ID が 4 の場合、ノードを表示$_GET['q']すると node/4 になります。パスがエイリアス化されていない場合、URL は同じになります。上記の例のように、ユーザーが を開いた場合、node/<h3>エスケープする必要はありarg(1)ませんが、そのページが 404 の結果を返すため (ブロック、ページ コンテンツなどが表示<h3>されない場合)、使用したスニペットがユーザーに表示されるかどうかは疑問です。arg())。

arg()in t()、 url() 、およびその他の関数を使用すると、l()常に結果がエスケープ/サニタイズされるため、実際の世界では、誰かがサイトを XSS できる実際のケースを見つけることはまずありません。

これが私が考えることができる悪い使用法です。page.tpl.php ファイルでは、次のように URL パスからクラスを追加できます。

<body class="<?php print arg(0); ?>">

ノード ページではボディ タグのクラスが「node」であり、管理ページではクラスが「admin」であると予想できます。しかし、ユーザーが次のようなページを開いたとします。

http://example.com/" onclick="alert('You are clicking on me');"

body タグの実際の HTML は次のようになります。

<body class="" onclick="alert('You are clicking on me');">

body タグに空の class 属性があり、body にも onclick イベントが追加されていることがわかります。これは最悪の例かもしれませんが、実際の例をお見せしたかっただけです。使用し$node->nidても安全です。

于 2012-11-28T06:23:09.267 に答える