Closed
Description
Issue Description
Hi guys, I encountered such a problem while using echo. The parameters in path may be overwritten by the parameters with the same name in query.
Checklist
- Dependencies installed
- No typos
- Searched existing issues and docs
Expected behaviour
Actual behaviour
Steps to reproduce
For example, the following example:
First request:
curl -X POST http://127.0.0.1:1323/pets/1/names -d '{"name":"Bear"}' -H "Content-Type: application/json"
output is {PetID:1 Name:Bear}
, and this is as expected.
If now an attacker passes the path
parameter with the same name query
parameter pet_id
:
curl -X POST http://127.0.0.1:1323/pets/1/names -d '{"name":"Bear", "pet_id":2}' -H "Content-Type: application/json"
The output at this time is not what I expected, pet_id
is overwritten:
{PetID:2 Name:Bear}
Is the above situation a known normal situation?
Working code to debug
package main
import (
"fmt"
"net/http"
"github.com/go-playground/validator/v10"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
type setPetNameParams struct {
PetID int64 `json:"pet_id" param:"pet_id" validate:"required"`
Name string `json:"name" query:"name" validate:"required"`
}
type Validator struct {
validator *validator.Validate
}
func NewValidator() *Validator {
return &Validator{validator: validator.New()}
}
func (v *Validator) Validate(i interface{}) error {
return v.validator.Struct(i)
}
func main() {
e := echo.New()
e.Validator = NewValidator()
e.Use(middleware.Logger())
e.Use(middleware.Recover())
e.POST("/pets/:pet_id/names", SetPetName)
e.Logger.Fatal(e.Start(":1323"))
}
func SetPetName(c echo.Context) error {
var (
params setPetNameParams
err error
)
if err = c.Bind(¶ms); err != nil {
return c.JSON(http.StatusBadRequest, err.Error())
}
if err = c.Validate(¶ms); err != nil {
return c.JSON(http.StatusBadRequest, err.Error())
}
fmt.Printf("%+v\n", params)
return c.String(http.StatusOK, params.Name)
}
Version/commit
go version go1.14.11 darwin/amd64
github.com/go-playground/validator/v10 v10.4.1
github.com/labstack/echo/v4 v4.1.17
Metadata
Metadata
Assignees
Labels
No labels