在HttpHandler中确定Request是否合法

时间:2016-04-01 17:40:47

标签: c# .net angularjs httphandler

我最近设置了一个httpHandler来保护我的HTML文件不被恶意用户直接拉取。我之前从未做过这样的事情,经过大量研究后,使用httpHandler似乎是最好的结果。然而,所有教程都解释了如何设置处理程序,但是所有教程似乎都以类似#34的结尾;现在只需检查请求是否合法!"没有解释如何做到这一点。

有很多关于如何停止来自其他域的请求的示例,例如,停止图像泄露。我想要做的是允许我的Angular图层对HTML文件的请求,但是阻止浏览器直接发出的请求。也就是说,如果Angular请求一个HTML模板,它应该得到它,但如果有人输入" mysite.com/static/templates/template.html"进入浏览器栏,应该被阻止。

我提出的解决方案是让Angular在每个请求中发送自定义标头;然后,httpHandler会查找此标头的存在,并在标头存在时返回HTML文件。因此,如果请求不是来自Angular生态系统,它没有标题,并且会被反弹。这种方法有两个问题:

  1. 它有点脆弱。我们已经(当然很少见)来自用户的报告被阻止了,而且我还没有能够确定为什么会发生这种情况。

  2. 它不适用于javaScript文件。 JS文件不会以相同的方式加载,因此我无法以同样的方式保护它们。

  3. 是否有更好的方法来判断请求是直接来自浏览器栏还是来自我的UI?

    前端是有角度的,后端是.NET 4.5。

1 个答案:

答案 0 :(得分:0)

不,没有。你能做的最好的就是查看标题。对于一个邪恶的人来说,这是微不足道的。用户可以复制合法标头的样子并反正获取数据。

如果您考虑要做什么,在输入网址,浏览器下载资源或ajax调用(标题除外)之间没有技术差异。即使您使用https,也可以使用Fiddler之类的工具或大多数现代语言中的两到三行代码轻松复制。

我不知道你为什么这样做,但如果由于带宽或其他原因,我建议你使用缓存。这是详细讨论一个主题的方法,所以我不会。

如果您追求的是文件的安全性(例如,您不希望有人在浏览器旁边查看js文件或html文件),那么您基本上没有运气,因为这样的事情是不可能的。