1. 概述
Legendshop电商系统采用Spring security进行安全防护,并且在系统级别做了安全防范措施。
2. 权限控制URL的访问权限
LegendShop电商系统扩展了Spring security。将用户分为普通用户(买家),商家(包括子账号,跟买家同一个登录入口),管理员。每个用户拥有不同的角色,每个角色拥有不同的权限,其关系如下:
前端用户的角色和权限列表
角色 |
名称说明 |
对应的权限 |
ROLE_USER |
普通用户 |
F_USER |
ROLE_SUPPLIER |
商家 |
F_SUPPLIER |
|
|
|
只有拥有ROLE_USER角色的用户才可以访问用户中心(以/p开头的url),只有拥有了ROLE_SUPPLIER角色才可以访问卖家中心(以/s开头的url)。
后端用户的角色和权限列表
角色 |
名称说明 |
对应的权限 |
ROLE_SUPERVISOR |
超级管理员 |
拥有后台所有权限 |
ROLE_DATA_MANAGER |
数据管理员 |
F_VIEW_ALL_DATA查看所有数据的权限 |
ROLE_SYSTEM |
系统管理员 |
查看系统管理相关的菜单 |
角色对应的权限可以自定义,也可以编辑和修改权限,只有通过后台登录页面登录的管理员和拥有对应菜单的访问权限才可以访问。
3. 防止SQL注入攻击
在dao层面杜绝了拼接SQL的API,需要带入参数并代替SQL中的“?”进行Prestatement的操作,例如
/**
*查询 返回Long类型的记录,一般用于查询总记录数
*/
public long getLongResult(String sql, Object... args)
/**
* 查找单个对象,必须要返回对象,否则报错
*/
public T load(String sql, Classclazz, Object... args)
/**
* 查询列表对象
*/
public Listquery(String sql, Classclazz, Object... args)
4. 防止XSS攻击
在关键位置例如商品搜索等加入xss过滤器,把一些特殊字符给过滤掉。
5. 数据库密码防护措施
在数据库中,密码是采用MD5 + salt方式进行加密,每个用户的salt值都不一样,这样使用更加难破解密码
6. JSP安全
业务逻辑的JSP文件基本上是位于WEB-INFO下面,使得杜绝从系统外部直接访问JSP,来达到攻击系统的可能。
7. 支付密码
用户的预存款必须要启用了支付密码才可以使用,在使用的过程中必须要输入支付密码,防止用户密码泄露之后乱用预存款
8. 防范DDOS拒绝服务攻击
如果系统是部署在阿里云上,阿里云会自动带上防DDOS攻击的功能。另外采用Nginx也可以做简单的防止DDOS攻击
8.1 限制连接的数量
将某个客户端IP地址所能打开的连接数限制为真实用户的合理值。例如,限制每一个IP对网站/store部分打开的连接数不超过10个:
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
...
location /store/ {
limit_conn addr 10;
...
}
}
该配置中,limit_conn_zone指令配置了一个名为addr的共享内存zone用来存储$binary_remote_addr的请求,location块中/store/的limit_conn指令引用了共享内存zone,并将最大连接数设置为10.
8.2 设置IP黑名单
如果能识别攻击者所使用的客户端IP地址,那么通过deny指令将其屏蔽,让Nginx和Nginx Plus拒绝来自这些地址的连接或请求。例如,通过下面的指令拒绝来自123.123.123.3、123.123.123.5和123.123.123.7的请求:
location / {
deny 123.123.123.3;
deny 123.123.123.5;
deny 123.123.123.7;
...
}
8.3 设置IP白名单
如果允许访问的IP地址比较固定,那么通过allow和deny指令让网站或者应用程序只接受来自于某个IP地址或者某个IP地址段的请求。例如,通过下面的指令将访问限制为本地网络的一个IP段:
location / {
allow 192.168.1.0/24;
deny all;
...
}