ASP使用变量赋值常量报错:Expected literal constant 求助
解决ASP中"Expected literal constant"错误的方案
问题核心在于VBScript的常量定义规则:Const关键字只能用来定义值固定的字面量常量,无法用动态变量(比如Request获取的参数)给常量赋值,这是语法硬性要求。
错误写法示例(触发报错)
<% ' 错误:用动态变量给Const赋值 Const Filename = Request("VTITLE") Set fs = Server.CreateObject("Scripting.FileSystemObject") Set file = fs.OpenTextFile(Server.MapPath(Filename)) %>
正确写法示例
把Const改成Dim定义普通变量,即可接收动态传入的参数:
<% ' 定义变量接收Request参数 Dim Filename Filename = Request("VTITLE") ' 关键:增加安全校验,防止路径遍历攻击 If Right(Filename, 4) <> ".txt" Or InStr(Filename, "../") > 0 Or InStr(Filename, "\..") > 0 Then Response.Write("非法文件名请求") Response.End() End If ' 正常读取文件 Set fs = Server.CreateObject("Scripting.FileSystemObject") Set file = fs.OpenTextFile(Server.MapPath(Filename)) ' 读取并输出文件内容示例 Response.Write(file.ReadAll()) ' 释放资源 file.Close() Set file = Nothing Set fs = Nothing %>
补充说明
- 常量(Const)的本质是值不可变且定义时必须是固定字面量,比如
Const Filename = "101.txt"是合法的,但用Request动态值就违反了这个规则。 - 必须加入安全校验:直接使用用户传入的文件名会导致路径遍历漏洞,恶意用户可能通过构造
../等路径访问服务器上的敏感文件,因此要限制文件后缀、过滤非法路径字符。
内容的提问来源于stack exchange,提问作者Penguin
相关产品推荐
相关产品推荐

