JCO*_*611 1 php http http-headers http-status-code-404
所以我有一个文件,用户永远不应该直接访问,但包含在另一个PHP文件中.如果直接调用该文件,它将生成HTTP状态404未找到,以欺骗可能的攻击者,使该文件不存在.但是,如果黑客可以判断404是由PHP生成的还是"自然"的话,那么标题的整个点就会丢失.那么有可能判断404是由服务器自然生成的(因为文件确实不存在)还是PHP代码?
PS:我知道这个问题可能看起来很奇怪哈哈
智能攻击者会检查原始状态标头并查找可能表明某些内容是否为"自然"404的任何差异.
例如,如果您请求的文件不存在,我服务器上的Apache版本会发回以下标题
HTTP/1.1 404 Not Found
Date: Thu, 06 Jan 2011 18:10:57 GMT
Server: Apache/2.2.17
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)
但是,如果我设置一个PHP页面来发回404标头,我的服务器会发回以下标头
HTTP/1.0 404 Not Found
Date: Thu, 06 Jan 2011 18:10:48 GMT
Server: Apache/2.2.17
Connection: close
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)
所以,没有什么能明显表明在第二种情况下是PHP生成了头文件,但这是额外的
Connection: close
Run Code Online (Sandbox Code Playgroud)
标题表示还有其他事情发生.非常复杂的攻击者为尽可能多的Web服务器和动态运行时构建了默认的头部配置文件,因为他们可以查看头部的确切内容和顺序,以确定您可能正在运行的服务器和技术堆栈.一个复杂的攻击者会知道(或者有一个工具表明)PHP总是发送一个Connection:close标头,这可能会揭示你的基础技术.
我使用命令行程序curl来检查标头.
curl -I 'http://example.com/asfasdfsd'
Run Code Online (Sandbox Code Playgroud)
你可以在OWASP维基上找到更多信息.
同样,确保PHP页面发回的原始文本与您的apache服务器发回的字节级别相匹配.智能攻击者会查找输出格式的差异,以确定您的页面是否是"自然"404.