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

Javascript 如果未登录,则限制对js文件的访问,javascript,vb.net,security,iis,login,Javascript,Vb.net,Security,Iis,Login,我有一个在.NETVB和SQLServer中开发的应用程序,我想限制登录用户可以使用js文件,但否则会返回403错误或类似错误。例如,用户只有在登录后才能media/js/controller/myController.js 我知道如果未登录,如何控制文件aspx、ashx和ascx的实际显示,但如果他们直接在浏览器中访问链接,则不知道如何阻止对js文件的访问,例如http://www.myapp.com/media/js/controller/myController.js。这是显示我的代码j

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

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

我怎样才能做到这一点

更新

这是我的
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>

您可以像提供任何服务器端脚本语言的任何其他内容一样提供javascript。只要设置适当的标题,web浏览器就会对结果非常满意

我运行生产代码,在html中,登录的访问者通过
标记指向php url

php代码然后:

  • 验证用户是否确实已登录
  • 发送标题
    内容类型:application/javascript
  • 然后只输出javascript的源代码
就这样

在.NET中应该没有那么大的不同

或者:在输出html的地方,也可以内联输出javascript。因此浏览器缓存js没有任何优势

有关.NET代码,请参见此处:

我不知道您为什么要限制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");
    }
}
在路由配置中

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

        routes.MapRoute(
              "JSFiles",
              "{controller}/{fileName}",
              new { controller = "Scripts", action = "Get" }
              );
    }
}
如果将此方法放在“ScriptsController”中,url将类似于其中main是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");
    }
}
为了防止直接下载,您可以在web配置中设置,或者将文件放在服务器上未提供服务的位置。不管怎样。从长远来看,Web配置可能会更好

web配置方式

<location path="media">
    <system.web>
        <authorization>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>


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

如果我理解正确,您只需将用户重定向到登录页面,如果用户键入URL并直接转到页面。虽然asp.net页面提供了禁用该功能的选项,但js文件不提供相同的选项。例如,如果用户在url栏中键入
xyz.com\admincreation\admin.aspx
,则应重定向到
xyz.com\login.aspx
。如果用户类型为
xyz.com\adminsection\JS\admin.JS
,也会发生同样的情况

在这种情况下,您不必做任何代码更改。这只是一个小的配置设置。只需将以下代码添加到web.config文件

<location path="YourJSFolderHere (e.g. adminsection\JS)">
  <system.web>
    <authorization>
        <deny users="?" />
    </authorization>
  </system.web>
</location>

您必须为每个有问题的文件夹添加此项


请注意,如果用户未登录,此操作可以正常工作。但是,如果用户登录并键入
xyz.com\adminsection\JS\admin.JS
,它将允许用户下载JS文件

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

发件人:

默认情况下,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>

以及:


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

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

<location path="public-js-folder-path">
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</location>


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

快速回答是,您不能。最终用户浏览器需要访问这些文件才能在他/她的一侧呈现您的站点,如果无法访问.js文件,他们将无法按照您的预期呈现站点。可能有机会使用一些.htaccess魔法来实现这一点,但如果它是某个重要站点,我不确定我会不会走这条路。@JaggenSWE是正确的,我理解浏览器需要访问js文件才能工作,但我的意思是在您未登录时限制访问(可能会阻止对文件夹的访问)您可以使用.htaccess“valid user”,否则您将需要从后端生成此js文件作为任何其他受限页面。我发现您正在使用IIS。有什么用吗?@CMedina你用的是什么类型的身份验证?我自己也试过了。它适用于未经身份验证的用户。我尝试了它,得到错误
path属性必须是相对虚拟路径。它不能包含任何“?”:“\”*”“'''或'|'。
我的js文件路径是:
static/xyz/js
我认为您使用了错误的路径。只需使用
。\static\xyz\js
,与在aspx文件中使用它的方式相同。这是一个很好的解决方案,不幸的是,我不使用控制器和路径,控制器的角色使它成为ashx文件。我尝试了它,得到的错误是
路径属性必须是相对虚拟路径。它不能包含任何“?”:“\”*”“'''或'|'。
我的js文件路径是:
静态/xyz/js
@CMedina您放置的位置路径是什么?我的js文件路径是
静态/xyz/js
@CMedina您放置的路径是
,它会给您这个错误吗?”?另外,您正在使用哪个IIS版本?还请记住,您需要在路径中输入要公开且不受限制的JS文件的位置(第