1. token校验
登录后生成token,客户端中将token存储cookie中,服务器端将token存储与session中。后续的接口请求必须带上token,当和服务器一致则认为请求安全。
常用于客户端和服务器端的安全校验。
2. 服务器之间的sign签名校验
A服务器中用一个 key(私钥) + 时间戳 通过算法生成一个公钥,将时间戳和公钥传递给服务器B。服务器B通过同样的私钥和时间戳来生成一个公钥。如果两个公钥相同,则签名通过。
用于服务器和服务器之前的签名认证。比如支付宝,微信等接口签名下发。
3. 验证码
当部分接口可能涉及到大量的请求来攻击的时候。比如登录,注册等包含提交信息的。需要先验证验证码,当验证码通过后才会处理后续逻辑。
缺点是,每次都要输入验证码,影响用户体验。可以通过某段时间范围内,用户请求量是否超过某个阈值,当超过某个阈值后,才会出现输入验证码,否则不会出现验证码。
4. 接口请求频次限制
部分接口可能涉及到用户大量频繁的提交,但是当超过某个频次后,我们可能认为他是恶意攻击。比如聊天室,搜索接口,翻译等接口。
当某个ip或者token对接口在时间范围内有大量请求的时候,应该将该用户的ip限制,接口返回429。
5. 正确使用post,get请求方式。涉及有安全数据的,应该用post来提交。
6. 接口返回中应该将不需要的数据过滤。比如获取某个用户信息接口,如果只要用户名,就返回用户名。不要将该用户的用户名,密码,住址等私密信息返回,以便于造成泄露。
7. 使用https
8. 定时的分析接口请求日志或者nginx日志,确认是否有非法的访问,防患于未然。 你会经常发现,请求中包含各种路径,甚至包含sql语句的。根据这种请求分析自己的系统中是否存在漏洞