2

javascript インクルードで .js ファイルの代わりに php ファイルを使用する際の問題は何ですか?

<script type='text/javascript' src='myjavascript.php'></script> 

もちろん、レジスターグローバルの問題などを調べてプラグインしますが、これにより発生する可能性のある他の脆弱性はありますか? このスクリプトがオンになっているページを 100,000 人以上が閲覧することになると考えてください。

4

2 に答える 2

5

いいえ、サーバーは他の PHP ファイルと同じように解析します。

ファイルは、他の Web ページとまったく同じように HTTP 要求によって取得されます。これを含めると<script>、GET リクエストを介して取得されますが、好奇心旺盛なユーザーが POST するのを防ぐことはできません。他の PHP スクリプトと同じ予防措置を講じる必要があります。それ以上でもそれ以下でもありません。

ブラウザに関する限り、これは単なる JavaScript です。PHP によって生成されているとは認識されないため、考慮すべき追加要素はありません。

ファイルに JavaScript を挿入する方法を残さない限り、問題ありません。入力を信頼せず、出力をエスケープしないようにしてください。

于 2009-09-14T09:22:36.913 に答える
1

これから発生する可能性のある他の脆弱性はありますか?

PHP 自体では、値を JavaScript に出力するには、HTML に出力する場合とは異なるエンコード スキームが必要です。htmlspecialchars()正しく理解していないと、HTML 生成 PHP での使用に失敗した場合と同じ種類のクロスサイト スクリプティングの問題に直面します。

var name= '<?= $name ?>';

<?php
    echo "var name='$name';"
?>

名前にアポストロフィやバックスラッシュが含まれている場合、これらはどちらも問題を引き起こします。addslashes()これは、実際に一度だけ正しいことができる数少ない場所の1つです!

また、JavaScript 同一生成元ポリシーの下で、通常はページへのアクセスが拒否される別のドメインの <script> タグによって JavaScript ファイルを含めることができることにも注意してください。これにより、スクリプトに機密性の高いユーザー固有のデータが含まれている場合、クロスサイト情報漏えい攻撃を受ける可能性があります。

<script src="http://www.targetsite.com/script.php" type="text/javascript"></script>
<script type="text/javascript">
    alert('Ha ha, I know you are logged in to targetsite.com as user '+name);
</script>

最後に、キャッシュに対処する必要があります。データが非常に動的な場合は、ブラウザがキャッシュしないように、スクリプト応答にキャッシュなしヘッダーを設定する必要があります。一方、あまり頻繁に変更されないデータの場合は、ブラウザーがより効率的にキャッシュできるように、有効期限、etags、および if-modified-since/not-modified ヘッダーを処理する必要があります。100,000 人全員が何度も何度もスクリプトをフェッチして、サーバーに負荷がかかるのは望ましくありません。

キャッシュを正しく処理することは非常に面倒であり、間違った場合には奇妙な結果が生じます。

これらを総合すると、JavaScript への PHP のテンプレート化が一般的に人気がない理由です。スクリプトの大部分が静的で、追加する必要があるデータの量が少ないという一般的な使用法では、関連する要素の属性で、またはコメントで非表示にして、そのデータを HTML にテンプレート化することをお勧めします。 DOM から、またはインライン <script> を含めることで読み取ることができます。

于 2009-09-14T11:20:42.177 に答える