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