如果未登录,则限制对js文件的访问

CMe*_*ina 4 javascript vb.net security iis login

我有一个在.net vb和SQLServer中开发的应用程序,我想限制文件js可供登录用户使用,但否则会返回403错误或类似错误.例如,用户应该media/js/controller/myController.js只能在他们登录时才能使用.

我知道如果他们没有登录,如何控制文件aspx,ashx和ascx的实际显示,但是如果他们直接在浏览器中访问链接,则不知道如何阻止访问js文件http://www.myapp.com/media/js/controller/myController.js.它显示我的代码javascript.

我怎样才能做到这一点?

UPDATE

这是我的身份验证模式 web.config

<!--<authentication mode="Windows"/>-->
<authentication mode="Forms">
  <forms name="AuthCookie" path="/" loginUrl="login.aspx" protection="All" timeout="2000">
    <credentials passwordFormat="Clear" />
  </forms>
</authentication>
<authorization>
  <!--<allow roles="***" />
  <deny users="*" />-->
  <deny users="?" />
  <allow users="*" />
</authorization>
Run Code Online (Sandbox Code Playgroud)

Bry*_*ton 5

我不确定你为什么要限制你的JavaScript文件,但使用它来通过控制器提供文件.

public class ScriptsController : Controller
{
    //option 1. Have one method for all the files.
    [LoggedIn]
    public ActionResult Get(string fileName)
    {
        return File(Server.MapPath("~/media/js/" + fileName + ".js"), "text/javascript");
    }
    //option 2:  have a method for each file 
    [LoggedIn]
    public ActionResult main()
    {
        return File(Server.MapPath("~/media/js/main.js"), "text/javascript");
    }
}
Run Code Online (Sandbox Code Playgroud)

在路由配置中

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {

        routes.MapRoute(
              "JSFiles",
              "{controller}/{fileName}",
              new { controller = "Scripts", action = "Get" }
              );
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您将此方法放在"ScriptsController"中,则该URL将类似于http://www.myapp.com/Scripts/Get/main,其中main是javascript控制器的名称.

为了防止直接下载,您可以在Web配置中设置该文件,或将文件放在服务器上的非服务位置.无论哪种方式.从长远来看,Web配置可能会更好.

web配置方式

<location path="media">
    <system.web>
        <authorization>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>
Run Code Online (Sandbox Code Playgroud)

您还应该添加验证以防止用户提供您要提供的js文件以外的文件(例如Web配置等)


Jaq*_*har 3

JS 文件被视为静态内容,.NET 默认情况下不处理它们。

来自MSDN

默认情况下,IIS 本身处理静态内容(例如 HTML 页面、CSS 和图像文件),并且仅在请求扩展名为 .aspx、.asmx 或 .ashx 的页面时才将请求交给 ASP.NET 运行时。

您可以手动设置配置来处理 .js 文件。请记住,这会增加一点开销,因为它们将通过 .NET 的管道。

添加到您的 web.config:

<compilation>
  <buildProviders>
    <remove extension=".js" />
    <add extension=".js" type="System.Web.Compilation.PageBuildProvider" />
  </buildProviders>
</compilation>
Run Code Online (Sandbox Code Playgroud)

和:

<system.webServer>
  <handlers>
    <add name="JS" path="*.js" verb="GET, HEAD, POST, DEBUG" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" />
  </handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

现在,由于您的 web.config 已经具有拒绝未经身份验证的用户访问 .NET 资源的全局规则,因此这些设置也将限制所有 JS 文件。

因此,您应该打开您不想阻止未经身份验证的用户访问的公共 js 文件的路径:

<location path="public-js-folder-path">
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</location>
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。如果您有任何疑问,请告诉我。