我有一个API Gateway端点设置,它使用Lambda函数在DynamoDB中存储URL。当我在正文中发布包含以下内容的消息时
"videoURL": "www.youtube.com/watch?v=cgpvCVkrV6M"端点工作正常。它返回200并更新DynamoDB记录。然而,当我发布这篇文章时
"videoURL": "https://www.youtube.com/watch?v=cgpvCVkrV6M"端点返回403禁止响应,并且数据库记录不会更新。
当我在API Gateway内部测试时,"https://“字符串被接受。
我还启用了API密钥、使用计划、客户端证书和CORS (用于本地测试)。我不认为这些都是我的问题的原因。
有没有人能猜出"https://“字符串为什么会出问题?”
发布于 2020-11-22 02:36:53
问题出在我的Web应用程序防火墙(WAF)中。创建防火墙时,我添加了AWS-AWSManagedRulesCommonRuleSet集合。根据documentation of this rule set的说法,其中一条规则是:
GenericRFI_BODY - Inspects the values of the request body and blocks requests attempting to exploit RFI (Remote File Inclusion) in web applications. Examples include patterns like ://.禁用此规则解决了我的问题。我现在可以成功地在我的数据库中发送并存储"https://“”。
但是,此规则代表最佳实践(或至少是良好实践),不应在不考虑风险的情况下禁用该规则。通过禁用此规则,我使我的端点容易受到远程文件包含攻击。因为我可以访问端点和Lambda函数定义,所以我可以将URL输入拆分为两个字段("https“和"www.youtube...")并使规则保持启用状态。对于遇到此问题的其他任何人,您必须权衡每种方法的易用性和风险。
https://stackoverflow.com/questions/64920512
复制相似问题