【问题标题】:Prevent direct access to html page in node js防止直接访问节点js中的html页面
【发布时间】:2014-10-10 06:41:29
【问题描述】:

我想防止用户直接输入页面的 url 并被引导到页面。 如何在节点中实现此功能? 我知道在 Web 应用程序中将文件放在 WEB-INF 文件夹下会阻止直接访问它们。

【问题讨论】:

  • 你可以检查referer,但是爬虫可以很容易地绕过它。但是,普通人会被阻止。在你做这件事之前想一想。它可能会导致可用性问题。

标签: node.js express


【解决方案1】:

如果您使用Express,您可以使用类似这样的方式检查中间件中的引用者,您应该根据具体目的进一步调整:

var express = require('express')
var app = express()

permittedLinker = ['localhost', '127.0.0.1'];  // who can link here?

app.use(function(req, res, next) {
  var i=0, notFound=1, referer=req.get('Referer');

  if ((req.path==='/') || (req.path==='')) next(); // pass calls to '/' always

  if (referer){
      while ((i<permittedLinker.length) && notFound){
      notFound= (referer.indexOf(permittedLinker[i])===-1);
      i++;
      }
  }

  if (notFound) { 
     res.status(403).send('Protected area. Please enter website via www.mysite.com');
  } else {
    next(); // access is permitted, go to the next step in the ordinary routing
  }
});

app.get('/', function(req,res){
    res.send('<p>Hello.  You are at the main page. </p><a href="page2">page 2</a>');
});

app.get('/page2', function(req,res){
    res.send('<p>You are at page 2</p>');
});

app.listen(3000);  // test at http://localhost:3000

测试(和对策)

我们可以获取主页吗? 是的

wget http://localhost:3000/

--2014-10-10 04:01:18--  http://localhost:3000/
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:3000... connected.
HTTP request sent, awaiting response... 
200 OK
Length: 67 [text/html]
Saving to: ‘index.html’

我们可以直接得到第二页吗? 没有

wget http://localhost:3000/page2
--2014-10-10 04:04:34--  http://localhost:3000/page2
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:3000... connected.
HTTP request sent, awaiting response... 403 Forbidden
2014-10-10 04:04:34 ERROR 403: Forbidden.

我们可以从第一页得到第二页吗? 是的

 wget --referer="http://localhost" http://localhost:3000/page2
--2014-10-10 04:05:32--  http://localhost:3000/page2
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:3000... connected.
HTTP request sent, awaiting response... 
200 OK
Length: 24 [text/html]
Saving to: ‘page2’

任何脚本小子都可以学习使用 wget --referer 来击败这种“保护”方案吗?

是的。它只会阻止诚实的人。不是真正想要内容的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 2010-09-16
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2012-05-22
    相关资源
    最近更新 更多