持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情
上两节重点讲解了接口安全中的鉴权机制,接下来重点讲解,参数加密和常见的Web漏洞
1、参数加密
由于HTTP协议采用明文传输数据,对于用户密码等敏感数据一般我们需要通过编码或加密以增加安全性。
加密算法分为对称式加密算法和非对称式加密算法,对称式加解密使用同一个秘钥,非对称式使用不同的秘钥,常见的加密算法如下:
(1)DES:数据加密标准,对称式加密,速度较快,适用于加密大量数据的场合。
(2)AES:高级加密标准,对称式加密,速度快,安全级别高。
(3)RSA:是一个支持变长密钥的公共密钥算法,非对称式加密。分公钥和私钥,SSH协议使用该算法.
(4)MD5:最常用的一种加密方法,是一种摘要算法,非对称式加密。
1.数字签名
为了防止数据被接获并篡改,可以通过数字签名的方式对整体参数进行拼接并组合密钥,对整体数据通过一定的算法生成一个数字签名(sign)。请求时签名和请求数据一起发送给服务端,服务端收到携带签名的请求后,会验证数据及签名是否一致,如果数据被篡改,则按算法重新计算出的签名将与所携带原签名不一致。通过对整体数据组合时间戳进行整体数字签名,也可以防止请求被截获及重复提交的问题,如支付接口。
2、常见的Web漏洞
数据加密用于防止数据被截获和篡改,鉴权机制用于防止接口被非法用户使用。但这些仍不能完全避免接口设计中的一些安全漏洞,常见的安全漏洞有SQL注入、XSS和CSRF等。
2.1 SQL注入
接口功能的实现常常需要与数据库进行交互,读取或修改数据库中的数据。当开发者直接使用请求中的参数拼接成SQL语句进行查询时,就很容易出现SQL注入的漏洞。
假如一个登录接口通过参数“name”和“password”来拼接SQL来验证用户名密码是否正确:
‘SELECT * FROM user WHERE username=%s AND password=%s’ % (name, password)
当我们传入一个存在的用户名“张三”,密码传入“123 or 1=1”时,SQL就会拼接为:
SELECT id FROM user WHERE username=”张三” AND password=123 or 1=1
无论密码写什么“or 1=1”都会将判断为真而返回张三的所有信息。
2.2 XSS
XSS(Cross Site Scripting), 即跨站脚本攻击,当接口直接使用用户输入的数据,并返回HTML页面时,就非常容易出现此漏洞。常见与一些论坛发帖、回帖、评论等处,恶意用户可以通过输入一些Javascript脚本来获取一些服务器的信息或当其他用户点击时获取其他用户的一些敏感信息。
2.3 CSRF
CSRF(Cross-site request forgery),即跨站请求伪造。当一些业务操作的请求使用GET方式时,攻击者可以通过将构造好的GET请求伪装成其他链接,通过诱使有权限的用户点击来完成该业务操作。