3

私はextjs4を使用して、drupal内に存在するWebアプリを構築しています。
私のajax呼び出しの多くは、drupal内のモジュールのメニュー項目に対するものです。
私のcssが指示する画像は、時々私のextjsフォルダー内にあり、時にはdrupalにあります。

同僚は、「../dir_a/」を使用する相対パスは設計が不適切であり、リスクが発生しやすいと主張しています。

これは正しいです?別の方法はありますか?

私のフォルダ構造:

- drupal
   - v2 (extjs home folder)
      - css
      - extjs
   - sites
      - mySite
          - modules
              - webApp

私のcssファイルには次のような呼び出しが含まれています:

.x-action-col-cell img.restart-test-icon {
    background-image: url(../extjs/examples/sandbox/images/gears.png);
}

私のアプリケーションには次のような呼び出しがあります。

Ext.Ajax.request({
   url: '../webapp/tests/create/',
   method: 'Post'
});

編集:コメント投稿者は説明を求めています。これに関する同僚の2つの主な問題は次のとおり
です。1。「サーバー側のコードが/a/b/c末尾のないようなアドレスを生成する/場合、/a/b/c../d
True?これは、サーバー側の問題のように聞こえます。
2.「他の誰かがそれを使用しているのを見たことがありますか?」
私の意見では、これは何かを決定するための非常に貧弱な方法です。
しかし、私は先に進んで、firebugを使用していくつかのJS集中型サイト(gmail、aws)をテストしまし../たが、JSまたはCSSでの使用は見つかりませんでした。
誰かが私がそれが完全に大丈夫だという私の主張を裏付けるのを手伝ってもらえますか?

4

4 に答える 4

1

サーバー側のコードが末尾のない/a/ b /cのようなアドレスを生成する場合//a / b / c../dを取得する状況が発生する可能性があります

これはそれがどのように機能するかではありません。/a/b/cにアクセスしている場合、はディレクトリではないため../d、ブラウザはです。文字列を連結しているだけの場合、問題があることがわかります(多くの言語には、パスを組み立てるための関数があることに注意してください)。これは必ずしもリスクではありません。間違ったファイルを要求するだけです。/a/b/dc/a/b/

タグと組み合わせて相対URLを使用しようとしているときに、いくつかの本当にばかげたクローラーが私のサイトをbase通り抜けて、ログに数千の404が含まれるのを見てきました...彼らは私の親戚のすべてが考慮されていなかったためですリンクは、ベースタグのhrefを前に付けることを目的としています。ベースタグを使用しなくても、問題は発生していません(相対的なものと絶対的なもののどちらの方法も推奨していません)。

于 2012-09-12T14:15:40.113 に答える
1

それはかなり貧弱な議論です、それは言うのに似ています:

データベース入力をサニタイズしないと、SQLインジェクション攻撃に対して脆弱になる可能性があるため、データベースは使用しません。

これはほとんど同じケースで、入力をサニタイズする問題です。

C#のPathクラスと同様に、使用しているサーバー側スタックにこれらを処理する機能(またはライブラリ)が組み込まれている可能性が高いです:http://msdn.microsoft.com/en-us/library/3bdzys9w (v = vs.71

于 2012-09-12T14:12:26.997 に答える
1

a。「サーバー側のコードが末尾のない/a/ b /cのようなアドレスを生成する場合//a / b / c ../ dを取得する状況が発生する可能性があります」本当ですか?これは、サーバー側の問題のように聞こえます。

ファイルにパスが適切に構成されていれば、問題は考えられません。

b。「他の誰かがそれを使っているのを見たことがありますか?」私の意見では、これは何かを決定するための非常に貧弱な方法です。

確かに、それは悪い方法です(1)。利用可能な最初のウェブサイト(stackoverflow.com)を試しました。このページに含まれているall.cssを参照してください。

.review-diff-bar .review-diff-bar-helper {
    background: url("../Img/diff-icons/full-html-diff.png") no-repeat scroll 0 0 transparent;
    ...
}

.openid-identifier {
    background: url("../img/openid-large.png") no-repeat scroll left center transparent;
    ...
}

これはcssですが、同じことがjsファイルにも当てはまります。

(1)このような誤謬に関する情報:http://www.fallacyfiles.org/ignorant.html

于 2012-09-12T14:14:34.077 に答える
0

相対パスを使用しない場合の主な問題は、他のファイル(css、html、jsファイルなど)を参照するファイルを移動するたびに、このファイルの参照を変更する必要があることです。

また、cssファイルをソースする別のjavascriptをソースするjavascriptをソースするhtmlがある場合、相対パスが何であるかが開発者に不明確になることがよくあります(開発者がこの領域で間違いを犯すのは非常に一般的です-それは含まれていますか? HTMLパスまたは参照される呼び出し元パス?)

さらに、1つのコメントで述べたように、この方法ではサーバー側レベルで同じパターンを使用することになり、場合によっては、わずかなセキュリティリスクが発生する可能性があります。

相対URLを使用する主な理由は、プロジェクト全体を1つのディレクトリから別のディレクトリに移動できるためです。ルート相対URLを使用している場合、これは実行できません。

全体として、決定は本当に個人的でプロジェクトに依存します。私は通常、ルート相対URLを好みますが、相対URLもあります。

ちなみに、ルートとして使用できるサーバー側変数またはコンパイル時変数を用意するのが最善です。これにより、安定性と柔軟性の両方が得られますが、多くの場合、これはほとんどの人が持っていない贅沢です。

于 2012-09-12T14:04:36.500 に答える