提问人:NAVOZ 提问时间:10/3/2023 最后编辑:NAVOZ 更新时间:10/3/2023 访问量:107
使用 url 编码输入的 XSS 缓解
XSS mitigation with url encoded input
问:
在我的一个应用程序中,我使用OWASP的Encoder for html来缓解XSS攻击,但不幸的是,这还不够。
渗透测试人员发现了一个反射的跨站点脚本威胁,其中输入字段内容或有效负载是 URL 编码的,XSS 编码/过滤器不对数据进行编码并允许输入传递给 Javascript 函数。
输入为:%3Cscript%3Ealert%285%29%3C%2Fscript%3E 或 39848%3balert(1)%2f%2f920
我也尝试过 Jsoup en html sanitize。他们都只过滤 html 的输出/输入,但这已经是编码形式。
function set() {
var span = window.parent.document.all.<%=Encode.forHtml(request.getParameter("address"))%>;
var action = '<%=Encode.forHtml(request.getParameter("action"))%>';
<logic:present name="postcodeForm" property="result">
<bean:size id="resultSize" name="postcodeForm" property="result"/>
<logic:notMatch name="resultSize" value="1">
span.innerHTML = "<bean:message key='error.result'/>";
span.className = "errSpec";
</logic:notMatch>
<logic:match name="resultSize" value="1">
<logic:iterate id="adres" name="postcodeForm" property="result">
span.innerHTML = "<bean:write name='address' property='Street'/> "
+ <%=Integer.parseInt(Encode.forHtml(searchString.substring(searchString.indexOf(',') + 1)))%>
<logic:present parameter="houseNumber">
<%=Encode.forHtml(request.getParameter("houseNumber"))%>
</logic:present>
+ "<br/>" + "<bean:write name='address' property='postcode'/> <bean:write name='address' property='houseNr'/>";
span.className = "";
if (action == 'postcode') {
var streetname= "<bean:write name='address' property='streetName' filter="false"/>";
任何想法或帮助都受到高度赞赏。
提前致谢!
答:
0赞
Heiko Theißen
10/3/2023
#1
如果所有请求参数都是 Javascript 代码中出现的字符串值,则复杂性会大大降低。然后,您只需要确保
- 请求参数中出现的任何字符串分隔符都会被正确转义 ( 变成 ) 和
"
\"
- 反斜杠被转义(变成),因此参数本身不能包含转义序列。
\
\\
不需要 HTML 编码。
您当前的代码不被视为字符串值,您应该编写而不是 .这是使用以下服务器端代码生成的:address
window.parent.document.all["XXX"]
window.parent.document.all.XXX
var span = window.parent.document.all["<%=
request.getParameter("address")
.replaceAll('"', '\\"')
.replaceAll('\\', '\\\\')
%>"];
var action = "<%=
request.getParameter("action")
.replaceAll('"', '\\"')
.replaceAll('\\', '\\\\')
%>";
即使攻击者设置为该值,这仍将被视为字符串:address
"];alert(1)
var span = window.parent.document.all["\"];alert(1)"];
(我不明白你目前对 的处理方式,但这也必须作为一个字符串来处理。houseNumber
评论
function set() { var span = window.parent.document.all.<%=Encode.forHtml(request.getParameter("address"))%>; var action = '<%=Encode.forHtml(request.getParameter("action"))%>';