使用Amazon JavaScript SDK防止XSS

使用Amazon JavaScript SDK防止XSS,javascript,amazon-web-services,xss,Javascript,Amazon Web Services,Xss,我正在使用AmazonScriptSDK将数据保存并加载到DynamoDB 用户仅限于使用IAM配置文件写入/更新与其FB id匹配的行: { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem"

我正在使用AmazonScriptSDK将数据保存并加载到DynamoDB

用户仅限于使用IAM配置文件写入/更新与其FB id匹配的行:

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Action": [
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:UpdateItem"
      ],
      "Resource": ["arn:aws:dynamodb:us-east-1:XXXXX:table/Items"],
      "Condition": {
        "ForAllValues:StringEquals": {
          "dynamodb:LeadingKeys": ["${graph.facebook.com:id}"]
        }
      }
  }]
}
和IAM配置文件,允许他们相互读取数据:

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Action": [
        "dynamodb:Query",
        "dynamodb:Scan"
      ],
      "Resource": ["*"]
  }]
}
但是,这意味着所有用户都可以读取彼此的数据,这可能导致XSS攻击,例如:

  • 用户1使用警报('xss')而不是图像url写入新记录
  • 用户2、3等加载站点并查看用户1的图像url,它会触发弹出窗口
我创建了一个测试写和读,AmazonSDK似乎没有进行任何消毒来防止XSS攻击。这就是我得到的回报:

{
    "Type": { "S": "instrumental" },
    "FileType": { "S": "audio/mp3" },
    "ItemId": { "S": "Albany" },
    "Name": { "S": "Manuel - Albany" },
    "Time": { "S": "1427245718743" },
    "UserId": { "S": "10152604048816638javascript:alert('XSS');" },
    "GroupId": { "S": "43mi7o18xkf"}
}
我已经研究了一些解决方案,例如在这里逃逸的胡子库:

var entityMap = {
    "&": "&",
    "<": "&lt;",
    ">": "&gt;",
    '"': '&quot;',
    "'": '&#39;',
    "/": '&#x2F;'
};

function escapeHtml(string) {
    return String(string).replace(/[&<>"'\/]/g, function (s) {
        return entityMap[s];
    });
}
var entityMap={
“&”:“&;”,
"": "",
'"': '"',
"'": ''',
“/”:“/;”
};
函数escapeHtml(字符串){
返回字符串。替换(/[&“\/]/g,函数){
返回entityMap[s];
});
}
但此解决方案不适用于json数据,我不确定这是否说明了此处列出的所有攻击方法:


理想情况下,我需要一个能够相当有效地接受json对象并返回json对象的解决方案(它将在移动设备上运行)

您最终如何显示JSON响应中的内容?vanilla JavaScript使用html将值合并并插入DOM InnerHtml您需要在前往amazon的途中通过自己的服务器运行它(预过滤),或者在客户端上显示它时要非常小心。使用innerHTML,可以保护您不受标记的影响,但不受旧的“onmouseover”的影响“而且是亲戚。您可以使用表单输入、textContent而不是innerHTML,或者查看客户端清理程序:代码或免费Web服务。是的,我希望有一个库可以传入JSON对象,它可以进行清理,但似乎找不到!JSON不需要消毒,它可以安全地对所有内容进行编码,只有解码后的内部值可能会带来风险。