Jar*_*ede 3 coldfusion query-string
在我们的索引文件中,在文件的顶部,我们通常会<cfparam>输出来自URL,表单或任何地方的变量.但是,我们收到了很多机器人,比如www.example.com/survey/index.cfm?nPageNumber=-1,这意味着像这样的cfparam:
<cfparam name="request.parameters.nPageNumber" default="1" type="numeric" />
Run Code Online (Sandbox Code Playgroud)
由于机器人放入查询字符串的无意义而导致失败.
我发现自己越来越不得不像这样编写我的cfparams:
<cfif structKeyExists(request.parameters,"nPageNumber") AND isNumeric(request.parameters.nPageNumber)>
<cfparam name="request.parameters.nPageNumber" default="1" type="numeric" />
<cfelse>
<cfset request.parameters.nPageNumber = 1>
</cfif>
Run Code Online (Sandbox Code Playgroud)
虽然这解决了这个问题,但我不禁觉得这个解决方案并不是最好/最有效的.我使用cfparam得当还是有更好的方法可以做到这一点?
确保变量的存在并验证其值是两个独立的任务.
在你URL和Form你的存在代码的情况下应该是这样的:
<cfparam name="URL.nPageNumber" default="1" type="string">
Run Code Online (Sandbox Code Playgroud)
使用type它只是为了确保没有发生任何真正奇怪的事情,例如值是结构或查询等.您不希望在此时获得特定,因为您想要一个优雅的错误而不是500用户.
一旦确定该值存在,您就需要验证该值.
<cfif isNumeric(URL.nPageNumber) EQ false OR URL.nPageNumber LT 1 OR URL.nPageNumber GT Variables.MaxPages>
<cfset ArrayAppend(Variables.ErrorArray, "Incorrect page number requested.")>
</cfif>
Run Code Online (Sandbox Code Playgroud)
您可以将值强制为理智,但请参阅Martian Headsets以获得鲁棒性原则的反对论证.
提供错误消息而不是"显示正确的东西"将告知您的用户他们做错了什么,并且意味着如果您还没有(尽管您应该),您不会被迫使用规范网址.
是的,这是更多的工作.你可以为它设计一些抽象,但在原始层面,这就是你应该用你的cfparams和验证.
在您不需要友好响应的情况下,例如机器人或显然是黑客或探测的请求,还有另外一个选项来提供"400"响应代码.w3c将响应定义为"请求语法错误或本质上不可能满足".这里和"由于语法错误,服务器无法理解请求.客户端不应该在没有修改的情况下重复请求." 在这里.
| 归档时间: |
|
| 查看次数: |
1052 次 |
| 最近记录: |