泽元网站内容管理系统(SQL注入检查ZCMS提供了全面的应用层安全机制,值得收藏!)
优采云 发布时间: 2021-11-15 16:17泽元网站内容管理系统(SQL注入检查ZCMS提供了全面的应用层安全机制,值得收藏!)
1 SQL注入检查
Zcms提供了完善的应用层安全机制,系统地处理了网站的主要安全威胁。Zcms是基于ZCF的底层框架构建的。ZCF中大部分数据库操作都是基于ORM的,不存在SQL注入的可能。少数非 ORM 的 SQL 语句都是基于 QueryBuilder 机制的。QueryBuilder 要求所有 SQL 条件都基于参数,不允许直接将字符串拼接成 SQL 语句,例如:
QueryBuilder qb = new QueryBuilder("select * from ZCLog where Type=? and ID=?", ArticleContentType.TypeID, articleID);
如果(StringUtil.isNotEmpty(用户名)){
qb.append(" and AddUser like ?", "%"+userName+"%");
}
如果 (StringUtil.isNotEmpty(startDate)) {
qb.append(" and AddTime>=?", startDate);
}
如果 (StringUtil.isNotEmpty(endDate)) {
qb.append(" and AddTimeaddDay(DateUtil.parse(endDate), 1));
}
qb.append("按添加时间降序排序");
数据表 dt = qb.executeDataTable();
QueryBuilder 是对参数化 Statement 的封装。它将传入的参数以字符串的形式传递给Statement,以防止传入的参数侵入SQL逻辑并被执行,从而达到防止SQL注入的目的。
2 跨站脚本检查
XSS (Cross Site Scripting) 攻击者向服务器提交恶意 HTML 代码。如果服务器未经检查就输出到一个HTML页面,当其他用户浏览该页面时,Web中嵌入的html代码就会被执行,从而达到攻击者的特殊目的。XSS 是一个常见的 网站 安全问题。
Zcms 采用了严格的参数检查机制,严防 XSS。对于任何传递给服务器的 HTTP 请求(无论是 get 还是 post 请求),请求中的参数默认只允许使用字母、数字、下划线等非危险字符,以及单引号、双引号等特殊字符不允许引用。如果参数Character中有特殊参数,Zcms会自动拦截请求并重定向到错误页面。如果页面确实需要接受收录特殊字符的参数,则对应的后台方法需要使用@Verify注解进行特殊声明,并检查方法中的参数是否合法或HTML转义存储。
3 防止非法文件上传
Zcms使用基于Flash的上传控制,上传文件前检查文件扩展名,只允许指定扩展名列表中的文件上传到服务器。同时,在将文件保存到磁盘之前,会在服务器后台再次检查文件扩展名,只有允许扩展名的文件才会写入磁盘。
Zcms中所有上传的文件在保存前也会检查文件路径。只允许保存在指定目录中。目录一般由WEB服务器解析。仅支持静态 .html 和 .shtml 文件,不支持 PHP/JSP 等动态页面执行。
此外,Zcms 旨在在低级别操作系统权限下运行。Zcms只需要对应用目录和发布文件的所有目录(通常是wwwroot)有读写权限即可正常运行。. Zcms 建议在非root用户下运行。
通过以上措施,Zcms可以防止非法上传程序到服务器,防止服务器安装了WebShell或挂掉。
4 防止未经授权的访问
除了防止未登录用户通过SQL注入、XSS、非法上传文件等方式破坏系统,Zcms还对合法登录用户的行为进行严格的权限检查,防止低权限用户免于非法超越他们的权力和执行高特权。操作。
Zcms 对所有页面添加了权限声明,例如:
"平台.分支" />
该语句限制当前页面只能被具有Platorm.Branch权限项(即组织管理权限项)的登录用户访问。如果没有登录或者没有Platform.Branch权限项,权限不足的页面会直接重定向,后续的页面逻辑不会被执行。
Zcms 不仅支持页面级别的权限检查,还支持对页面上的按钮、控件、显示区域进行细粒度的权限检查。它可以方便灵活地为不同的按钮分配不同的权限项,只有当前用户的权限项满足按钮所需的权限项时,按钮才对用户可见或可用。
Zcms 还对所有后台方法进行权限检查。当后台方法被调用时,ZCF框架会检查该方法的@Priv注解。如果当前用户不满足@Priv注解中要求的权限,则不会执行该方法中的程序逻辑,提示用户权限不足。