2

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

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

我该如何解决这个问题?

4

4 回答 4

6

我不认为 URI 编码会起作用—— Siteminder 足够聪明,可以解决这个问题。某种其他类型的编码,例如 base64,或者只是用其他东西替换撇号,然后在服务器端将其替换回。或者,您可以在 Siteminder 代理配置中禁用 BadCSSChar 检查撇号。请注意,您的网站可能会受到 XSS 攻击,并且您的应用程序必须负责检查任何用户提供的字符串,然后再将它们显示在网页上。

于 2012-12-03T22:38:18.253 回答
0

尝试使用 %27 对单引号进行 URI 编码。

于 2012-12-01T15:28:44.133 回答
0

如果您在两端都有代码运行,您可以发送 mySingleQuoteToken 并且您在远端的代码可以检测到并将其替换为 '

发送端的预处理 - 在调用 java.net.URLEncoder 之前:

url_new = url_old.replaceAll("'", "mySingleQuoteToken");

接收端的后处理 - 在调用 java.net.URLDecoder 之后:

url_new = url_old.replaceAll("mySingleQuoteToken", "'");
于 2016-03-03T14:15:34.880 回答
0

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

  1. 在 HTML 表单中包含字段名称和年龄
  2. 使用操作属性指定不带查询参数的 URL。
  3. 使用方法属性将方法指定为 POST。
  4. 使用 enctype 属性将 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>
    
于 2019-01-09T19:54:56.320 回答