From 7c546e9606fb7b6c5ff1417bfa11a80ac57fa1c1 Mon Sep 17 00:00:00 2001 From: Tindy X <49061470+tindy2013@users.noreply.github.com> Date: Thu, 30 Jan 2020 11:10:19 +0800 Subject: [PATCH] Fix a potential loop request bug which may cause server to overload --- src/webget.cpp | 2 +- src/webserver_libevent.cpp | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/webget.cpp b/src/webget.cpp index 02cad2f..5add36c 100644 --- a/src/webget.cpp +++ b/src/webget.cpp @@ -8,7 +8,7 @@ extern bool print_debug_info; //std::string user_agent_str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"; -static std::string user_agent_str = "subconverter/latest cURL/7.xx-DEV"; +std::string user_agent_str = "subconverter/latest cURL/7.xx-DEV"; static int writer(char *data, size_t size, size_t nmemb, std::string *writerData) { diff --git a/src/webserver_libevent.cpp b/src/webserver_libevent.cpp index 353b80e..5bb153b 100644 --- a/src/webserver_libevent.cpp +++ b/src/webserver_libevent.cpp @@ -16,6 +16,8 @@ #include "webserver.h" #include "socket.h" +extern std::string user_agent_str; + struct responseRoute { std::string method; @@ -76,6 +78,12 @@ void OnReq(evhttp_request *req, void *args) int retVal; std::string postdata, content_type, return_data; + if(user_agent_str.compare(evhttp_find_header(req->input_headers, "User-Agent")) == 0) + { + evhttp_send_error(req, 500, "Loop request detected!"); + return; + } + if(EVBUFFER_LENGTH(req->input_buffer) != 0) { postdata.assign((char *)EVBUFFER_DATA(req->input_buffer), EVBUFFER_LENGTH(req->input_buffer));