如何实现接口的安全(接口安全性)

网友投稿 405 2023-01-20


本篇文章给大家谈谈如何实现接口的安全,以及接口安全性对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享如何实现接口的安全的知识,其中也会对接口安全性进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

php开发api接口,如何做才算是安全的

这个问题很深

安全,不敢当,因为web安全问题很多,不仅仅是PHP编码而已,有很多安全上的问题需要做处理,像服务器漏洞、端口开放都会导致被黑,这都是很正常的。

只能说 比如在我做PHP开发过程的一些安全保护和在网络安全公司开发时的工作要求:

1、最基础的,提供的api接口 要配置https。

2、api返回响应的信息,要尽可能使用消息加密返回,如高位数的 rsa加密内容。

3、接收的回调开放接口,尽可能做到使用回调黑、白名单,如加ip白名单放行,或ip黑名单禁止访问。

4、不要相信用户输入、输入信息要进行编码转换、转义、过滤、使用框架和插件进行处理,如MySQL查询的要进行参数绑定、如显示问题要避免xss攻击会进行过滤。

5、授权操作,错误限制设置阀值、超过阀值限制访问、如最基础的登录功能。

6、常见额弱口令问题导致漏铜,应设置高强度口令,避免程序爆破。

7、文件上传问题、应严格校验文件类型、后缀、格式、及文件目录权限设置,从而避免文件上传漏洞导致恶意代码或webshell攻击。

8、开发环境和生产环境隔开,不要再生产上面开debug、及时更新使用框架漏洞补丁如PHP国内常用 tp系列以前偶尔爆出漏洞(我用的较多就是tp5 ....),还有框架不要用最新要选择最稳定的。

最后注意不管是验证还是过滤,在客户端执行过一次也好,在服务端,都要再次执行验证和校验。


和盛之文  我的文章保存网站,欢迎访问学习或参考

如何保证API接口安全?

在实际的业务开发过程中,我们常常会碰到需要与第三方互联网公司进行技术对接,例如支付宝支付对接、微信支付对接、高德地图查询对接等等服务,如果你是一个创业型互联网,大部分可能都是对接别的公司api接口。

当你的公司体量上来了时候,这个时候可能有一些公司开始找你进行技术对接了,转变成由你来提供api接口,那这个时候,我们应该如何设计并保证API接口安全呢?

最常用的方案,主要有两种:

其中 token 方案,是一种在web端使用最广的接口鉴权方案,我记得在之前写过一篇《手把手教你,使用JWT实现单点登录》的文章,里面介绍的比较详细,有兴趣的朋友可以看一下,没了解的也没关系,我们在此简单的介绍一下 token 方案。

从上图,我们可以很清晰的看到,token 方案的实现主要有以下几个步骤:

在实际使用过程中,当用户登录成功之后,生成的token存放在redis中时是有时效的,一般设置为2个小时,过了2个小时之后会自动失效,这个时候我们就需要重新登录,然后再次获取有效token。

token方案,是目前业务类型的项目当中使用最广的方案,而且实用性非常高,可以很有效的防止黑客们进行抓包、爬取数据。

但是 token 方案也有一些缺点!最明显的就是与第三方公司进行接口对接的时候,当你的接口请求量非常大,这个时候 token 突然失效了,会有大量的接口请求失败。

这个我深有体会,我记得在很早的时候,跟一家中、大型互联网公司进行联调的时候,他们提供给我的接口对接方案就是token方案,当时我司的流量高峰期时候,请求他们的接口大量报错,原因就是因为token失效了,当token失效时,我们会调用他们刷新token接口,刷新完成之后,在token失效与重新刷新token这个时间间隔期间,就会出现大量的请求失败的日志,因此在实际API对接过程中,我不推荐大家采用 token方案。

接口签名,顾名思义,就是通过一些签名规则对参数进行签名,然后把签名的信息放入请求头部,服务端收到客户端请求之后,同样的只需要按照已定的规则生产对应的签名串与客户端的签名信息进行对比,如果一致,就进入业务处理流程;如果不通过,就提示签名验证失败。

在接口签名方案中,主要有四个核心参数:

其中签名的生成规则,分两个步骤:

参数2加密结果,就是我们要的最终签名串。

接口签名方案,尤其是在接口请求量很大的情况下,依然很稳定。

换句话说,你可以将接口签名看作成对token方案的一种补充。

但是如果想把接口签名方案,推广到前后端对接,答案是:不适合。

因为签名计算非常复杂,其次,就是容易泄漏appsecret!

说了这么多,下面我们就一起来用程序实践一下吧!

就像上文所说,token方案重点在于,当用户登录成功之后,我们只需要生成好对应的token,然后将其返回给前端,在下次请求业务接口的时候,需要把token带上。

具体的实践,也可以分两种:

下面,我们介绍的是第二种实现方式。

首先,编写一个jwt 工具。

接着,我们在登录的时候,生成一个token,然后返回给客户端。

最后,编写一个统一拦截器,用于验证客户端传入的token是否有效。

在生成token的时候,我们可以将一些基本的用户信息,例如用户ID、用户姓名,存入token中,这样当token鉴权通过之后,我们只需要通过解析里面的信息,即可获取对应的用户ID,可以省下去数据库查询一些基本信息的操作。

同时,使用的过程中,尽量不要存放敏感信息,因为很容易被黑客解析!

同样的思路,站在服务端验证的角度,我们可以先编写一个签名拦截器,验证客户端传入的参数是否合法,只要有一项不合法,就提示错误。

具体代码实践如下:

签名工具类 SignUtil :

签名计算,可以换成 hamc 方式进行计算,思路大致一样。

上面介绍的token和接口签名方案,对外都可以对提供的接口起到保护作用,防止别人篡改请求,或者模拟请求。

但是缺少对数据自身的安全保护,即请求的参数和返回的数据都是有可能被别人拦截获取的,而这些数据又是明文的,所以只要被拦截,就能获得相应的业务数据。

对于这种情况,推荐大家对请求参数和返回参数进行加密处理,例如RSA、AES等加密工具。

同时,在生产环境,采用 https 方式进行传输,可以起到很好的安全保护作用!

API接口安全设计方案(已实现)

网络安全方案如何实现接口的安全,主要从数据加密与api接口安全两个方面考虑如何实现接口的安全,数据加密https已经加密了,就不再次加密了;主要从api安全方面考虑。

在代码层面,对接口进行安全设计
一、使用token进行用户身份认证
二、使用sign防止传入参数被篡改
三、用时间戳防止暴力请求

用户身份认证如何实现接口的安全的流程图如下:

具体说明如下:

1、 用户登录时,客户端请求接口,传入用户名和密文如何实现接口的安全的密码
2、 后台服务对用户身份进行验证。若验证失败,则返回错误结果;若验证通过,则生成一个随机不重复的token,并将其存储在redis中,设置一个过期时间。
其中,redis的key为token,value为验证通过后获得的用户信息
3、 用户身份校验通过后,后台服务将生成的token返回客户端。
客户端请求后续其如何实现接口的安全他接口时,需要带上这个token。后台服务会统一拦截接口请求,进行token有效性校验,并从中获取用户信息,供后续业务逻辑使用

为了防止中间人攻击(客户端发来的请求被第三方拦截篡改),引入参数的签名机制。
具体步骤如下:

1、客户端和服务端约定一个加密算法(或MD5摘要也可), 客户端发起请求时,将所有的非空参数按升序拼在一起,通过加密算法形成一个sign,将其放在请求头中传递给后端服务。
2、后端服务统一拦截接口请求,用接收到的非可空参数根据约定好的规则进行加密,和传入的sign值进行比较。若一致则予以放行,不一致则拒绝请求。

由于中间人不知道加密方法,也就不能伪造一个有效的sign。从而防止了中间人对请求参数的篡改。

sign机制可以防止参数被篡改,但无法防dos攻击(第三方使用正确的参数,不停请求服务器,使之无法正常提供服务)。因此,还需要引入时间戳机制。
具体的操作为:客户端在形成sign值时,除了使用所有参数和token外,再加一个发起请求时的时间戳。即

sign值来源 = 所有非空参数升序排序+token+timestamp

而后端则需要根据当前时间和sign值的时间戳进行比较,差值超过一段时间则不予放行。
若要求不高,则客户端和服务端可以仅仅使用精确到秒或分钟的时间戳,据此形成sign值来校验有效性。这样可以使一秒或一分钟内的请求是有效的。
若要求较高,则还需要约定一个解密算法,使后端服务可以从sign值中解析出发起请求的时间戳。
总结后的流程图如下:

这里还是隐藏下了。

规则:sha1(keyvalkeyval+token+timestamp+id)

例如:sha1(address33bussinessType22city111companyNamest232ringtokentimestampid)

这里新增一个id值,与token对应,传输过程中不使用,只用于加密,保证数据即使被截获,因为请求中没有id的传输,更加安全。

token身份认证;

timestamp方式防止dos攻击,防止重放,简单说就是一次接口调用,只能用一定时间,比如比对时间,60s内该次调用有效,60秒后失效;

sign签名,通过参数+token+timestamp+id固定位加密,保证参数不会被修改,调用有效;

08.如何保证API接口的安全性问题01


1.互联网Api接口到底如何保证安全性问题?
2.代码落地实战防御XSS、CSRF攻击
3.代码落地如何防御接口数据被黑客抓包篡改?
4.接口数据加密对称还是非对称加密好


XSS攻击通常指的是通过利用 网页 开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括 Java 、 VBScript 、 ActiveX 、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。 [1]

脚本攻击:利用JavaScript 注入 到后台数据库中,在通过展示数据加载该脚本 该脚本中(

1.使用js获取cookie信息(jwt)

2.将该jwt数据 上传黑客服务器(ajax)

获取jwt---用户会话信息 让后模拟请求形式使用该jwt登录。

xss攻击典型网站:论坛、评论区

getUserInfo?userName=

getUserInfo?userName=


前端传递 js 脚本到服务器端

后端接口将该脚本存放数据库中


前端html


将用户前端所提交的参数进行过滤。

html 大于 小于号 <



该方式的缺陷:每个参数都需要像这样写 代码非常冗余



接口接受参数 ?传递参数形式---

传递参数都是json数据形式

spring mvc 接受 json数据提供 api回调


1.可以使用第三方抓包工具,对请求前后实现代理,可以修改参数请求内容和参数响应内容,抓包工具http调试工具

2.Fiddler4下载地址:https://pc.qq.com/detail/10/detail_3330.html

使用Fiddler4篡改请求之前:




使用MD5可以直接验证签名参数 MD5 属于单向加密,只能够暴力破解。

MD5应用场景 在nacos分布式配置中心中,使用MD5 比对文件内容是否发生改变

HasherPro比对文件内容是否发生改变。

MD5在线暴力破解地址:https://www.cmd5.com/


String userName= "123456" ;
System. out .println( DigestUtils. md5Hex (userName));


黑客如何破解?自己需要根据参数内容 生成签名

如果只是改了参数内容---没有用的 所以我们需要该签名


{"password":"123456","phoneNumber":"phoneNumber","channel":"安卓","equipment":""}

{sign=325ab041d4889825a46d1e1e802ab5de, timestamp=1652537015771}


关于如何实现接口的安全和接口安全性的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 如何实现接口的安全的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于接口安全性、如何实现接口的安全的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于post测试工的信息
下一篇:Maven安装与配置图文教程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~