在我的应用程序代码中,我使用这种 url 将用户从一个页面重定向到另一个页面:http://myhost:8001/myapp/list.jsp?name=abc'd&age=10
这里的 name 是用户可以在第一页上编辑的动态字段,其中可以包含单引号。
现在的问题是,当我使用 siteminder 进行身份验证时,每个 url 都会通过它。并且 siteminder 将此单引号视为此类攻击的尝试并阻止此 url 并将用户带到某些访问被阻止的页面。
我该如何解决这个问题?
在我的应用程序代码中,我使用这种 url 将用户从一个页面重定向到另一个页面:http://myhost:8001/myapp/list.jsp?name=abc'd&age=10
这里的 name 是用户可以在第一页上编辑的动态字段,其中可以包含单引号。
现在的问题是,当我使用 siteminder 进行身份验证时,每个 url 都会通过它。并且 siteminder 将此单引号视为此类攻击的尝试并阻止此 url 并将用户带到某些访问被阻止的页面。
我该如何解决这个问题?
我不认为 URI 编码会起作用—— Siteminder 足够聪明,可以解决这个问题。某种其他类型的编码,例如 base64,或者只是用其他东西替换撇号,然后在服务器端将其替换回。或者,您可以在 Siteminder 代理配置中禁用 BadCSSChar 检查撇号。请注意,您的网站可能会受到 XSS 攻击,并且您的应用程序必须负责检查任何用户提供的字符串,然后再将它们显示在网页上。
尝试使用 %27 对单引号进行 URI 编码。
如果您在两端都有代码运行,您可以发送 mySingleQuoteToken 并且您在远端的代码可以检测到并将其替换为 '
发送端的预处理 - 在调用 java.net.URLEncoder 之前:
url_new = url_old.replaceAll("'", "mySingleQuoteToken");
接收端的后处理 - 在调用 java.net.URLDecoder 之后:
url_new = url_old.replaceAll("mySingleQuoteToken", "'");
以下步骤应该可以帮助您解决问题。
输入值并提交表单。
<form action="/myapp/list.jsp" method="post" enctype="application/x-www-form-urlencoded">
<input type="text" id="name" name="name" value=""/>
<br/>
<input type="text" id="age" name="age" value=""/>
<br/>
<input type="submit"/>
</form>