我想知道带$ _SERVER
的变量是否应该被视为安全,或者是否应该在使用之前对其进行过滤。我试图检测连接是否来自CloudFlare。在此基础上,我选择获取客户IP地址的方法。当连接来自CloudFlare时,$_SERVER["HTTP_CF_CONNECTING_IP"]
应该存在,其内容应该是客户端的IP。
根据Which $_SERVER variables are safe? $_SERVER["HTTP_CF_CONNECTING_IP"]
可以由用户控制,因此以这种方式获得的IP可能是欺骗性的。
$ip = isset($_SERVER["HTTP_CF_CONNECTING_IP"])?$ _SERVER["HTTP_CF_CONNECTING_IP"]:$ _SERVER["REMOTE_ADDR"];
这个问题有什么好的解决方案吗?
答案 0 :(得分:4)
$_SERVER
的数据未明确设计为被视为SQL源代码。
$_SERVER
中的某些数据直接从HTTP请求中复制(即用户输入)。
应将其视为系统外部的任何其他输入,并应应用适当的转义/过滤。