show warning for asset directory transversal to prepare for network api based reload in v5

This commit is contained in:
Shelikhoo 2021-05-05 11:25:50 +01:00
parent 736379d22d
commit a720d1e2d6
No known key found for this signature in database
GPG Key ID: C4D5E79D22B25316
4 changed files with 21 additions and 1 deletions

View File

@ -0,0 +1,9 @@
package platform
import "github.com/v2fly/v2ray-core/v4/common/errors"
type errPathObjHolder struct{}
func newError(values ...interface{}) *errors.Error {
return errors.New(values...).WithPathObj(errPathObjHolder{})
}

View File

@ -7,6 +7,7 @@ import (
"io/fs"
"os"
"path/filepath"
"strings"
)
func ExpandEnv(s string) string {
@ -25,6 +26,10 @@ func GetToolLocation(file string) string {
// GetAssetLocation search for `file` in certain locations
func GetAssetLocation(file string) string {
filepathCleaned := filepath.Clean(file)
if strings.HasPrefix("..", filepathCleaned) {
newError("directory transversal is not allowed for assets. This will be forbidden in v5.").AtWarning().WriteToLog()
}
const name = "v2ray.location.asset"
assetPath := NewEnvFlag(name).GetValue(getExecutableDir)
defPath := filepath.Join(assetPath, file)

View File

@ -7,6 +7,8 @@ import (
"strings"
)
//go:generate go run github.com/v2fly/v2ray-core/v4/common/errors/errorgen
type EnvFlag struct {
Name string
AltName string

View File

@ -19,8 +19,12 @@ func GetToolLocation(file string) string {
return filepath.Join(toolPath, file+".exe")
}
// GetAssetLocation search for `file` in the excutable dir
// GetAssetLocation search for `file` in the executable dir
func GetAssetLocation(file string) string {
filepathCleaned := filepath.Clean(file)
if strings.HasPrefix("..", filepathCleaned) {
newError("directory transversal is not allowed for assets. This will be forbidden in v5.").AtWarning().WriteToLog()
}
const name = "v2ray.location.asset"
assetPath := NewEnvFlag(name).GetValue(getExecutableDir)
return filepath.Join(assetPath, file)