Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 清理url和参数_Validation_Security_Sanitization - Fatal编程技术网

Validation 清理url和参数

Validation 清理url和参数,validation,security,sanitization,Validation,Security,Sanitization,目前,我的软件有以下工作流程 用户通过RESTAPI执行搜索并选择项目 服务器再次执行相同的搜索以验证用户的选择 为了实现步骤2,用户必须将用于搜索的URL参数作为字符串发送(例如age=10&gender=M) 然后服务器将http\u获取(url+“?”+用户提交的参数) 恶意用户是否可以通过操纵用户提交的参数使服务器连接到意外的服务器 如果即使保留换行符,用户也可以任意操作HTTP头,那么最坏的情况是什么 当您将用户提交的参数添加到?分隔符后的基本URL时,您可以避免域上下文更改为用户名或

目前,我的软件有以下工作流程

  • 用户通过RESTAPI执行搜索并选择项目
  • 服务器再次执行相同的搜索以验证用户的选择
  • 为了实现步骤2,用户必须将用于搜索的URL参数作为字符串发送(例如
    age=10&gender=M

    然后服务器将
    http\u获取(url+“?”+用户提交的参数)

    恶意用户是否可以通过操纵用户提交的参数使服务器连接到意外的服务器


    如果即使保留换行符,用户也可以任意操作HTTP头,那么最坏的情况是什么

    当您将用户提交的
    参数添加到
    分隔符后的基本URL时,您可以避免域上下文更改为用户名或密码时使用的此类攻击:

    说URL是
    http://example.com用户提交的
    参数
    @evil.com
    ,您的URL字符串连接中没有
    /
    字符

    这将使您的URL
    http://example.com@evil.com
    这实际上意味着域名
    evil.com
    上的用户名
    example.com

    但是,在强制连接用户名时,您应该是安全的。在您的情况下,URL变成:

    http://example.com?@evil.com
    

    如果在基本URL中包含斜杠(最好练习)。这些都是安全的,因为它只需将您的网站
    evil.com
    作为查询字符串值传递,因为解析器将不再将
    @evil.com
    解释为域

    如果即使保留换行符,用户也可以任意操作HTTP头,那么最坏的情况是什么

    这取决于
    http\u get
    函数在清除值方面的性能。如果
    http\u get
    未在内部剥离换行符,则攻击者可能会控制从应用程序发送的标头

    e、 g.如果
    http\u get
    内部创建了以下请求

    GET <url> HTTP/1.1
    Host: <url.domain>
    
    产生

    GET /foo/bar HTTP/1.1
    Host: example.com
    
    攻击者可以将用户提交的参数设置为

    <space>HTTP/1.1\r\nHost: example.org\r\nCookie: foo=bar\r\n\r\n
    
    根据
    http_get
    解析域的方式,这可能不会导致请求转到
    example.org
    ,而不是
    example.com
    ——它只是在操作标题(除非
    example.org
    是与您的站点位于同一IP地址的另一个站点)。但是,攻击者成功地操纵了标头并添加了它们自己的cookie值。攻击者的优势取决于在您的特定设置下,他们这样做可以获得什么-不一定有任何一般优势,如果他们能够通过使您的代码在攻击者的控制下发出请求,从而诱使您的代码以意外的方式运行,则更可能是一种逻辑漏洞攻击

    你该怎么办? 为了防止意外和未知情况,请使用正确处理标头注入的
    http\u get
    版本。许多现代语言现在在内部处理这种情况


    或者-如果
    http\u get
    是您自己的实现,请确保它清理或拒绝包含无效字符(如回车符或换行符)的URL以及URL中无效的其他参数

    谢谢你的回答!我相信显式地处理消毒总比期望外部库“自动”处理好
    GET /foo/bar HTTP/1.1
    Host: example.com
    
    <space>HTTP/1.1\r\nHost: example.org\r\nCookie: foo=bar\r\n\r\n
    
    http_get("https://example.com/" + "?" + "<space>HTTP/1.1\r\nHost: example.org\r\nCookie: foo=bar\r\n\r\n")
    
    GET / HTTP/1.1
    Host: example.org
    Cookie: foo=bar
    
     HTTP/1.1
    Host: example.com