Add protection for malformed requests

This commit is contained in:
Leonid Bugaev
2015-08-23 13:07:29 +03:00
parent f3ea30c6df
commit f0b96af420
3 changed files with 26 additions and 1 deletions
+4
View File
@@ -30,6 +30,10 @@ func NewHTTPModifier(config *HTTPModifierConfig) *HTTPModifier {
} }
func (m *HTTPModifier) Rewrite(payload []byte) (response []byte) { func (m *HTTPModifier) Rewrite(payload []byte) (response []byte) {
if !proto.IsHTTPPayload(payload) {
return payload
}
if len(m.config.methods) > 0 { if len(m.config.methods) > 0 {
method := proto.Method(payload) method := proto.Method(payload)
+7 -1
View File
@@ -5,6 +5,7 @@ import (
"log" "log"
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/buger/gor/proto"
) )
const initialDynamicWorkers = 10 const initialDynamicWorkers = 10
@@ -186,8 +187,13 @@ func (o *HTTPOutput) sendRequest(client *HTTPClient, request []byte) {
meta := payloadMeta(request) meta := payloadMeta(request)
uuid := meta[1] uuid := meta[1]
body := payloadBody(request)
if !proto.IsHTTPPayload(body) {
return
}
start := time.Now() start := time.Now()
resp, err := client.Send(payloadBody(request)) resp, err := client.Send(body)
stop := time.Now() stop := time.Now()
if err != nil { if err != nil {
+15
View File
@@ -208,3 +208,18 @@ func Method(payload []byte) []byte {
func Status(payload []byte) []byte { func Status(payload []byte) []byte {
return Path(payload) return Path(payload)
} }
var httpMethods []string = []string{
"GET ", "OPTI", "HEAD", "POST", "PUT ", "DELE", "TRAC", "CONN",
}
func IsHTTPPayload(payload []byte) bool {
method := string(payload[0:4])
for _, m := range httpMethods {
if method == m {
return true
}
}
return false
}