在AWS CloudFront和S3上配置X-Frame-Options响应标头

时间:2015-10-15 09:20:56

标签: angularjs amazon-s3 amazon-cloudfront x-frame-options

我试图为云端服务的亚马逊s3托管的角度js应用设置X-Frame-Options HTTP响应标头,我有可能做到吗?

2 个答案:

答案 0 :(得分:0)

您可以使用Lambda@Edge函数将x-frame-options标头添加到CloudFront / S3的响应中。 lambda代码在本地边缘位置运行,但需要在us-east-1区域中创建和维护。

此处的示例代码使用nodeJS 6.10添加响应头

'use strict'; 
 exports.handler = (event, context, callback) => {
   const response = event.Records[0].cf.response; 
   const headers = response.headers; 
   response.headers['x-frame-options'] = [{"key":"X-Frame-Options","value":"SAMEORIGIN"}]; 
   console.log(response.headers); 
   callback(null, response);
 }; 

创建Lambda的最终版本,然后将Lambda Version的触发器配置设置为路径模式行为的CloudFront origin-response事件类型。

示例代码将事件记录到CloudWatch日志服务以进行调试。如果您还没有,则需要设置lambda执行IAM角色,该角色允许策略允许edgelambda.amazonaws.comlambda.amazonaws.com承担CloudWatch日志操作。

允许将日志写入CloudWatch的基本Lambda执行策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*",
            "Effect": "Allow"
        }
    ]
}

信任关系允许Lambda和Lambda @ Edge担任角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "edgelambda.amazonaws.com",
          "lambda.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

如果AWS只是允许在GUI中设置x-frame-options标头,但在此之前,此解决方案可以正常运行,并且可以让您的安全审核员满意。

答案 1 :(得分:-1)

是的,您可以在$ http角度服务中设置标题,如下所示:

    editText.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP) {

                int startSelection = editor.getSelectionStart();
                int endSelection = editor.getSelectionEnd();

                String selectedText = editor.getText().toString().substring(startSelection, endSelection);

                AppConfig.quicktoast(selectedText);

            }
            return false;
        }
    });