如何绕过包含单引号的url的siteminder?

时间:2012-11-30 10:59:40

标签: jsp authentication web-applications xss siteminder

在我的应用程序代码中,我使用这种网址将用户从一个页面重定向到另一个页面:http://myhost:8001/myapp/list.jsp?name=abc'd&age=10 这里的名称是用户可以在第一页上编辑的动态字段,其中可以包含单引号。

现在的问题是当我使用siteminder进行身份验证时,每个url都会通过它进行传递。并且siteminder将此单引号视为此类攻击的尝试并阻止此URL并将用户带到某个访问被阻止的页面。

如何解决此问题?

4 个答案:

答案 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)

下面的步骤应该可以帮助您解决问题。

  1. 将字段名称和年龄包含在HTML表单中
  2. 使用操作属性指定不带查询参数的URL。
  3. 使用方法属性将方法指定为POST。
  4. 使用enctype属性将编码类型指定为application / x-www-form-urlencoded
  5. 输入值并提交表单。

    <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>