Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON API的XSS漏洞_Json_Rest_Xss_Owasp_Websecurity - Fatal编程技术网

JSON API的XSS漏洞

JSON API的XSS漏洞,json,rest,xss,owasp,websecurity,Json,Rest,Xss,Owasp,Websecurity,我有一个RESTAPI,它接受并返回JSON数据 下面是一个请求-响应示例 请求 { "repos": [ "some-repo", "test-repo<script>alert(1)</script>" ] } { “回购协议”:[ “一些回购协议”, “测试报告警报(1)” ] } 回应 { "error": "Err

我有一个RESTAPI,它接受并返回JSON数据

下面是一个请求-响应示例

请求

{
    "repos": [
        "some-repo",
        "test-repo<script>alert(1)</script>"
    ]
}
{
“回购协议”:[
“一些回购协议”,
“测试报告警报(1)”
]
}
回应

{
    "error": "Error Message",
    "repos": [
        "test-repo<script>alert(1)</script>"
    ]
}
{
“错误”:“错误消息”,
“回购协议”:[
“测试报告警报(1)”
]
}
我的API是否易受XSS攻击?。据我所知,由于内容类型设置为application/json,因此API本身是安全的。客户端需要确保对输出进行编码以防止任何XSS攻击。 为了添加额外的安全层,我可以在API层中添加一些输入编码/验证


请让我知道我的评估是否正确,以及我需要注意的任何其他问题

我认为您的api易受攻击,尽管脚本可能无法执行。谈到XSS预防,我们总是建议在api处理输入时解码/验证危险字符。有一个共同的要求“在数据存储到数据库之前清理数据”
至于您的情况,api只是响应json,但我们不知道json中的数据将用于何处。通常前端在不进行任何解码/验证的情况下接受数据,如果这样,将出现xss。

您谈到客户机使用解码从api获取的数据。是的,我同意,但是前端总是“信任”后端,这样他们就不会解码数据。但是api服务器不应该信任前端的任何输入,因为这可能会被(恶意)用户控制/更改。

我认为任何XSS问题都是客户端的漏洞,这是正确的。如果客户机将HTML插入到文档中,则其负责应用任何必要的编码

客户机知道需要什么编码,而不是服务器。对于相同的数据,不同的地方可能需要不同的编码,或者不需要编码。例如:

如果客户做了如下操作:

$(div).html("<b>" + repos + "</b>");
$(div).append($("<b>").text(repos));
然后HTML编码将导致HTML实体代码错误地显示给用户

或者,如果客户机希望对数据进行一些处理,它可能希望先对纯文本数据进行处理,然后对其进行编码以输出


输入验证也会有所帮助,但有效输入的规则可能与无需编码即可安全使用的规则不一致。符号、引号和方括号也可以出现在有效的文本数据中。但是,如果您的数据不能包含这些字符,您可以将输入视为无效而拒绝。

您的API不会受到XSS的攻击,除非它还提供了使用它的UI。您的API的客户端可能会受到攻击-在任何UI中使用API之前,他们需要确保正确编码API中的任何数据