防xss攻击,需要对请求参数进行escape吗?-阿里云开发者社区

开发者社区> 云计算> 正文
登录阅读全文

防xss攻击,需要对请求参数进行escape吗?

简介: <div class="markdown_views"> <h2 id="防xss攻击需要对请求参数进行escape吗"><strong>防xss攻击,需要对请求参数进行escape吗? </strong></h2> <p>先看一个测试: <br> 请求: <br><a href="http://localhost:8080/testapi/testapi?apiPath=h

防xss攻击,需要对请求参数进行escape吗?

先看一个测试:
请求:
http://localhost:8080/testapi/testapi?apiPath=http%3A%2F%2Fhbjltv.com%2Finfo%2Frequest%3Fusername%3Dhuang%26password%3Dadmin
解码之后就是:
http://localhost:8080/testapi/testapi?apiPath=http://hbjltv.com/info/request?username=huang&password=admin

该接口用于测试协作方接口的应答状态码.
为了防止xss攻击,所以对所有参数都进行html escape:

@RequestMapping("/testapi")
    @ResponseBody
    public String test(String apiPath, String requestMethod) throws IOException {
        apiPath = HtmlUtils.htmlEscape(apiPath);
        URL url = new URL(apiPath);
        URLConnection urlConnection = url.openConnection();
        HttpURLConnection httpUrlConnection = (HttpURLConnection) urlConnection;
        httpUrlConnection.setDoInput(true);
        httpUrlConnection.setUseCaches(false);
        if (!ValueWidget.isNullOrEmpty(requestMethod)) {
            httpUrlConnection.setRequestMethod(requestMethod);
        }
        httpUrlConnection.connect();
        int responseStatusCode = httpUrlConnection.getResponseCode();
        httpUrlConnection.disconnect();
        System.out.println("responseStatusCode:" + responseStatusCode);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("responseCode", responseStatusCode);

        map.put("apiPath", apiPath);
        return HWJacksonUtils.getJsonP(map);
    }

看看协作方接口收到的参数:
协作方后台日志
我传递的参数名称明明是password,但是现在怎么变成了amp;password ?
因为:

apiPath = HtmlUtils.htmlEscape(apiPath);

所以对参数进行HTML escape时应该不处理&

修改HTML escape 的函数如下:

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: