2

マスターページに含まれるjsファイルがあります。

ユーザーがブラウザのアドレスバーに直接リンクを入力したときにファイルアクセスを拒否したい.

次のようなURLフィルタリングIISを試しました:

<security>
        <requestFiltering>
            <denyUrlSequences>
                <add sequence="Scripts/Foo/bar.min.js" />
            </denyUrlSequences>
        </requestFiltering>
    </security>

「localhost://blah/Scripts/Foo/bar.min.js」と入力するとブロックされます。

しかし、この js ファイルを必要とするページはレンダリングできません。

誰にも回避策がありますか?前もって感謝します!

4

3 に答える 3

3

私はついにこれを見つけまし

これらのセクションを web.config に追加しました。

<security>
  <requestFiltering>
    <filteringRules>
      <filteringRule name="protectjs" scanUrl="true" scanQueryString="true">
        <scanHeaders>
          <clear />
          <add requestHeader="Accept" />
        </scanHeaders>
        <appliesTo>
          <clear />
          <add fileExtension=".js" />
        </appliesTo>
        <denyStrings>
          <clear />
          <add string="text/html" />
        </denyStrings>
      </filteringRule>
    </filteringRules>
  </requestFiltering>
</security>

この方法はそれほど信頼できないことはわかっていますが、現在は機能しています。

于 2013-03-28T05:50:03.887 に答える
2

100%確実ではありませんが、これを行う方法はないと思います。ブラウザがページをレンダリングすると、実際には、ブラウザで JS ファイルを手動で入力したときと同じリクエストがサーバーに送信されます。

IIS には、ユーザーが行う要求と、ページの処理中にバックグラウンドで行う 1 つのブラウザーを区別する手段がありません。

うまくいくかもしれないことの1つは

  1. この Scripts/Foo/bar.min.js?ID=E3CF305B-4444-E011-8FD2-1CC1DEE89A7F のような JS ファイルに何らかの ID を追加します。
  2. ID には時間制限があり、作成後 20 秒ほどしか機能しません (ブラウザがページをロードするのに十分な時間です)。
  3. ID を解析し、サーバーがリクエストを返すかどうかを決定するカスタム ハンドラーを作成する

そのため、誰かが Scripts/Foo/bar.min.js ハンドラーを入力すると、リクエストは拒否されますが、期限切れの ID が使用されている場合はリクエストも拒否されます。

ただし、これはおそらく保守が難しく、サーバーのパフォーマンスが大幅に低下する可能性があります。

JS ファイルを隠したい場合は、難読化してください。

于 2013-03-27T12:43:32.993 に答える