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