lua htmlspecialchars 转换特殊的字符为 HTML 编码。
格式: result = htmlspecialchars(字符串)
下列字符会被转换:
'&' (ampersand) 转换为 '&' '”' (double quote) 转换为 '"' ”'” (single quote) 转换为 ''' '' (greater than) 转换为 '>' '/' (greater than) 转换为 '/'
local function htmlspecialchars(s)
local HTML_ENTITIES = {
["&"] = "&",
["
[">"] = ">",
['"'] = """,
["'"] = "'",
["/"] = "/"
}
return string.gsub(s, "[\">/
end
示例:
local txt="2d@alet('1')\"3dd#@@#@$<>
s = htmlspecialchars(txt)
print(s)
执行结果:
2d@<wad312?script>alet('1')"</script>3dd#@@#@$<><
如果项目中可以直接使用nginx进行XSS过滤,建议直接使用。因为1. Lua 中正则表达式的性能并不如 Nginx 中的正则表达式优秀;2.Lua 中的正则表达式并不符合 POSIX 规范,而 Nginx 中实现的是标准的 POSIX 规范,后者明显更具备通用性。3.Lua 中的正则表达式与 Nginx 中的正则表达式相比,有 5%-15%的性能损失。4.实际编译执行过程效率低下。Lua 将表达式编译成 Pattern 之后,并不会将 Pattern 缓存,而是每此使用都重新编译一遍,潜在地降低了性能。Nginx 中的正则表达式可以通过参数缓存编译过后的 Pattern ,不会有类似的性能损失。