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)
我不确定你为什么要限制你的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配置等)
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)
希望能帮助到你。如果您有任何疑问,请告诉我。
| 归档时间: |
|
| 查看次数: |
2291 次 |
| 最近记录: |