最近在写代码的时候发现的一些很容易被忽视的安全问题。
下面我们来具体看看这几个漏洞形成的原因和解决方法。首先让我们来回顾一下网络安全的三要素。
1. 常见的攻击方式
cookie
来实现登录功能的。而cookie
只要存在浏览器中,那么浏览器在访问这个cookie
的服务器的时候,就会自动的携带cookie
信息到服务器上去。那么这时候就存在一个漏洞了,如果你访问了一个别有用心或病毒网站,这个网站可以在网页源代码中插入js代码,使用js代码给其他服务器发送请求(比如ICBC的转账请求)。那么因为在发送请求的时候,浏览器会自动的把cookie
发送给对应的服务器,这时候相应的服务器(比如ICBC网站),就不知道这个请求是伪造的,就被欺骗过去了。从而达到在用户不知情的情况下,给某个服务器发送了一个请求(比如转账)2.当然,文中最开始提到的安全问题都不是由以上三点造成的,具体形成原因出在业务实现层,如下。
/*
* 获取客户端ip
* @return mixed
*/
function get_client_ip(): string {
$client_ip = "";
if (getenv("HTTP_TRUE_CLIENT_IP")) {
$client_ip = getenv("HTTP_TRUE_CLIENT_IP");
} else if (getenv("HTTP_CDN_SRC_IP")) {
$client_ip = getenv("HTTP_CDN_SRC_IP");
} else if (getenv("HTTP_X_FORWARDED_FOR")) {
$client_ip = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv("REMOTE_ADDR")) {
$client_ip = getenv("REMOTE_ADDR");
}
$client_ip = str_replace(" ", "", $client_ip);
$client_ip_arr = explode(",", $client_ip);
return empty($client_ip_arr[0]) ? '' : $client_ip_arr[0];
}