mirror of
https://github.com/buger/goreplay.git
synced 2024-04-21 12:32:02 +00:00
Add protection for malformed requests
This commit is contained in:
@@ -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
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user