|
|
1
Community Mohan Dere
6 年前
我走进了
cfusion.jar
ColdFusion文件。我发现有点困惑。
CGI范围不属于
structure
人们所希望的形式。
这就是如何处理对CGI变量的调用。如
<cfoutout>#cgi.THIS_IS_A_FAKE_KEY#</cfoutout>
-
正常有效的CGI范围变量是此列表中的变量,这些变量将初始化为
""
默认情况下。
private static final String[] names ="AUTH_PASSWORD","AUTH_TYPE","AUTH_USER","CERT_COOKIE","CERT_FLAGS","CERT_ISSUER","CERT_KEYSIZE","CERT_SECRETKEYSIZE","CERT_SERIALNUMBER","CERT_SERVER_ISSUER","CERT_SERVER_SUBJECT","CERT_SUBJECT","CF_TEMPLATE_PATH","CONTENT_LENGTH","CONTENT_TYPE","CONTEXT_PATH","GATEWAY_INTERFACE","HTTP_ACCEPT","HTTP_ACCEPT_ENCODING","HTTP_ACCEPT_LANGUAGE","HTTP_CONNECTION","HTTP_COOKIE","HTTP_HOST","HTTP_USER_AGENT","HTTP_REFERER","HTTP_URL","HTTPS","HTTPS_KEYSIZE","HTTPS_SECRETKEYSIZE","HTTPS_SERVER_ISSUER","HTTPS_SERVER_SUBJECT","LOCAL_ADDR","PATH_INFO","PATH_TRANSLATED","QUERY_STRING","REMOTE_ADDR","REMOTE_HOST","REMOTE_USER","REQUEST_METHOD","SCRIPT_NAME","SERVER_NAME","SERVER_PORT","SERVER_PORT_SECURE","SERVER_PROTOCOL","SERVER_SOFTWARE","WEB_SERVER_API" };`
此外,所有这些值还来自各种java库
javax.servlet
,
HttpServletRequest
等
-
如果经过一点检查后请求的变量不是这些变量中的任何一个,那么ColdFusion将转到请求头。您可以使用
getHttpRequestData().headers
. 然后在那里寻找带有连字符的键(
-
)而不是下划线(
_
)在
cgi
密钥请求。(如果钥匙以开头
http_
,则请求标头中的键将不包含它,如下所示
http_x_forward
请求标头中的
x-forward
)
value = request.getHeader(name.replace('_', '-'));
根据我对ColdFusion的理解,第一点中提到的键是公认的CGI范围的一部分。但是,当Apache负载平衡器服务器向ColdFusion传递额外信息时,这些信息最终会出现在请求头中。自从爪哇
getHeader
只返回一个空白字符串(或数据类型为
undefined
)而不是未定义的错误,
ColdFusion不识别是否定义了任何键
.
所以如果钥匙
THIS_IS_A_FAKE_KEY
从Apache服务器等中介发送到ColdFusion。你会在
getHttpRequestData().headers['THIS-IS-A-FAKE-KEY']
但不是在
CGI
范围转储。
尽管如此,我个人的意见是,最好直接在
getHttpRequestData()。标题
用于范围本身以外的自定义CGI变量。
|