所以这就是我想要实现的目标!
我想创建一个非常简单的Node应用程序,我可以通过创建输入文本框和提交按钮来使用eval
函数。我希望能够在文本框中编写内容,并在点击提交时使用eval
函数将此参数发送到服务器。
因此,如果我在文本框中写while(true)
,由于eval
漏洞,这会导致对服务器的DoS攻击。
到目前为止,这是我的代码(修复无法正常工作)
var http = require("http");
var server = http.createServer(function(request, res) {
res.writeHead(200, {"Content-Type": "text/html"});
res.write("<html>");
res.write("<head>");
res.write("<title>Hello World Page</title>");
res.write("</head>");
res.write("<body>");
res.write("Enter Some text");
res.write('<input type="text" name="fname">');
res.write('<input type="submit" value="Submit")');
var parameter = eval(req.body.fname);
res.send(parameter);
res.write("</body>");
res.write("</html>");
res.end();
});
server.listen(1337);
console.log("Server is listening");
关于如何使这项工作的任何想法?
答案 0 :(得分:0)
首先 - 这是关于该主题的好帖子:Accessing the HTTP message body (e.g. POST data) in node.js
对您的HTML进行了一些小改动:
req.on(...)
逻辑。在阅读发布的表单数据时,您需要读取所有数据,直到完成为止。 req参数是一个事件发射器,因此您可以使用:
req.on('data', function(chunk) {...}
req.on('end', function() {...}
要缓冲传入的数据,请在到达请求结束时对其进行操作。
表单数据已编码,因此您需要使用查询字符串模块对其进行解析。
我还添加了足够的错误检查(并修复了一些命名错误),以使代码在基本级别上运行。
代码:
var http = require("http");
var querystring = require('querystring');
var util = require('util');
var server = http.createServer(function(req, res) {
var body = "";
req.on('data', function (chunk) {
body += chunk;
});
req.on('end', function () {
console.log('POSTed: ' + body);
body = querystring.parse(body);
console.log('decoded: ' + util.inspect(body));
res.writeHead(200, {"Content-Type": "text/html"});
res.write("<html>");
res.write("<head>");
res.write("<title>Hello World Page</title>");
res.write("</head>");
res.write("<body>");
res.write("Enter Some text");
res.write('<form action="/" method="post">');
res.write('<input type="text" name="fname">');
res.write('<input type="submit" value="Submit">');
res.write('</form>');
if(body.fname) {
var parameter = eval(body.fname);
console.log(util.inspect(parameter));
if(parameter) {
res.write(parameter);
}
}
res.write("</body>");
res.write("</html>");
res.end();
});
});
server.listen(1337);
console.log("Server is listening");