Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
High performance nodejs http/https static file handler,using c++ addon and libuv lib
ifile is a simple static http/https handler module, build with libuv and c++.
the module are also be used in express and flat.js framework.
With npm:
ifile module is supported windows, linux, mac.
Make sure, node-gyp has installed.
npm install ifile
From source:
git clone https://github.com/DoubleSpout/ifile.git
cd ifile
node-gyp rebuild
To include the module in your project:
var ifile = require('ifile');
##benchmark send the same js file, 6KB size.
nginx
ab -c 100 -n 20000 http://192.168.28.5:8124/js/test.js
Requests per second: 2634.31 [#/sec] (mean)
ab -c 500 -n 20000 http://192.168.28.5:8124/js/test.js
Requests per second: 1886.92 [#/sec] (mean)
ab -c 800 -n 20000 http://192.168.28.5:8124/js/test.js
Requests per second: 2033.45 [#/sec] (mean)
ab -c 500 -n 20000 -H "Accept-Encoding: gzip" http://192.168.28.5:8124/js/test.js
Requests per second: 2029.59 [#/sec] (mean)
ifile
ab -c 100 -n 20000 http://192.168.28.5:8125/js/test.js
Requests per second: 2077.29 [#/sec] (mean)
ab -c 500 -n 20000 http://192.168.28.5:8125/js/test.js
Requests per second: 1880.00 [#/sec] (mean)
ab -c 800 -n 20000 http://192.168.28.5:8125/js/test.js
Requests per second: 1791.16 [#/sec] (mean)
ab -c 500 -n 20000 -H "Accept-Encoding: gzip" http://192.168.28.5:8125/js/test.js
Requests per second: 1858.01 [#/sec] (mean)
express
ab -c 100 -n 20000 http://192.168.28.5:8126/js/test.js
Requests per second: 915.21 [#/sec] (mean)
ab -c 500 -n 20000 http://192.168.28.5:8126/js/test.js
Requests per second: 858.89 [#/sec] (mean)
ab -c 800 -n 20000 http://192.168.28.5:8126/js/test.js
Requests per second: 668.99 [#/sec] (mean)
ab -c 500 -n 20000 -H "Accept-Encoding: gzip" http://192.168.28.5:8126/js/test.js
Requests per second: 677.11 [#/sec] (mean)
express+ifile
ab -c 100 -n 20000 http://192.168.28.5:8127/js/test.js
Requests per second: 1684.85 [#/sec] (mean)
ab -c 500 -n 20000 http://192.168.28.5:8127/js/test.js
Requests per second: 1717.32 [#/sec] (mean)
ab -c 800 -n 20000 http://192.168.28.5:8127/js/test.js
Requests per second: 1399.09 [#/sec] (mean)
ab -c 500 -n 20000 -H "Accept-Encoding: gzip" http://192.168.28.5:8127/js/test.js
Requests per second: 1468.06 [#/sec] (mean)
var ifile = require('ifile')
var http = require('http')
ifile.add([
["/static",__dirname,['js','css','jpg']],
],function(req,res,is_static){
res.statusCode = 404;
res.end('404')
})
var http = require('http');
http.createServer(function (req, res) {
ifile.route(req,res);
}).listen(8124);
then request the 127.0.0.1:8124/static/xxx.js
if you have a file in __dirname/static/xxx.js then you will see it.
##API
ifile.add(routearray,not_match_callback);
ifile.route(req,res); route the request
routearray:
[ [request_url_prefix, static_folder [,support_extensions_array]], ... ]
example:
[
["/static",__dirname,['js','css','jpg']],
["/static2",__dirname],
["/skin","static",['js','css','jpg']] //static folder will be __dirname+'/'+static
]
not_match_function: if ifile not match the request,the not_match_function will be called.It has three parameters,req, res and is_static. for example if add ["/static2",__dirname] 1,request "/user/aaa" will call the not_match_function,and is_static param will be 0; 2,request "/static/not_exist_file" will call the not_match_function,and is_static param will be 1;
##options set ifile.options property to change the default options,for example:
var ifile = require('ifile');
ifile.options = {
expired:86400*100*30,
gzip:false
}
default options is that:
default_options = {
pipe_szie : 1024*1024*20, //超过20MB的静态文件使用pipe传输不读入内存
expired : 86400*1000, //cache-control : max-age=86400
gzip : true, //是否开启gzip
gzip_min_size : 1024, //开启gzip的文件必须大于等于1024byte
gzip_file : ['js','css','less','html','xhtml','htm','xml','json','txt'], //gzip压缩的文件后缀名
gzip_level : 9, //-1表示使用默认值
}
more example see /test/main.js
##expressjs example
var express = require('express');
var app = express();
var ifile = require("ifile");
app.use(ifile.connect());
//default is [['/static',__dirname]];
app.listen(3000);
FAQs
High performance nodejs http/https static file handler,using c++ addon and libuv lib
We found that ifile demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.