接口相关
1、接口验证之解决ajax跨域:
1>通过php配置。。。略
2>通过服务器Nginx配置文件添加请求头的方式:
单个域名的不说了,就直接origin后添加指定域名就行了。
多个域名需要通过$http_origin系统变量获取请求源域名,并设置允许跨域访问
add_header 'Access-Control-Allow-Origin' $http_origin; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
注:如果ajax端请求的时候要求了Credentials include,那么Credentials必须设置为true,且此时Origin不能为'*'(w3c要求的)。此时用$http_origin来允许域名跨域访问,若需要访问限制,则在php中添加(ip等)。
还有两种Nginx里配置多域名跨域的方法没成功,就是使用map映射添加 或者 用正则判断请求源域名是否为允许的并添加到数组一起设置到origin的方法,后期再要试一下
2、接口验证之接口安全:
1> 前后端约定secret;
前端将请求参数+时间戳序列化
把约定好的secret加载序列化参数后的字符串前面(或者规则自定就好)并进行md5加密,等到sign
把sign和时间戳也加为参数去请求接口
后端收到请求后,先看下有没有sign和时间戳内容,没有直接返回错误
有的话将参数+约定好的secret按照与前端相同的格式md5加密后得到后端验证的sign
如果与前端传过来的相同,则接口验证成功。
2>由于js代码对用户透明,则无法保存secret,那么可以与后端协商一个根据接口动态生成secret的方式来避免展示secret。
3>防刷:接口请求的ip限制,频次限制(每秒10次等)。 等待补充。