SamWaf 开源轻量级网站防火墙源码


一、详细介绍

SamWaf网站防火墙是一款适用于小公司、工作室和个人网站的开源轻量级网站防火墙,完全私有化部署,数据加密且仅保存本地,一键启动,支持Linux,Windows 64位,Arm64。

主要功能:

代码完全开源

支持私有化部署

轻量化不依赖三方服务

完全独立引擎,防护功能不依赖IIS,Nginx

自定义防护规则,支持脚本和界面编辑

支持白名单访问

支持IP黑名单

支持URL白名单

支持限制URL访问

支持指定界面数据隐私输出

支持CC频率访问

支持全局一键配置

支持分网站单独防护策略

日志加密保存

通讯日志加密

信息脱敏保存

支持OWASP CRS规则集

自动SSL证书申请以及续签

SSL证书批量检测到期情况

支持IPV6

支持自定义拦截界面

二、效果展示

1.部分代码

代码如下(示例):

// 导出excel
func (w *WafCommonApi) ExportExcelApi(c *gin.Context) {
	var req request.WafCommonReq
	err := c.ShouldBind(&req)
	if err == nil {
		// 生成文件名
		fileName := time.Now().Format("20060102150405") + ".xlsx"

		// 创建 Excel 文件
		f := excelize.NewFile()
		sheetName := "Sheet1"
		// 获取数据的类型和值
		dataType, dataValue := getStructTypeValueByName(req.TableName)

		/*dataType := reflect.TypeOf(data)
		dataValue := reflect.ValueOf(data)*/

		// 设置表头
		for i := 0; i < dataType.NumField(); i++ {
			field := dataType.Field(i)
			if field.Name == "BaseOrm" {
				f.SetCellValue(sheetName, fmt.Sprintf("%s%d", w.GetColumnName(i), 1), " - ")
			} else {
				colName := field.Tag.Get("json") // 获取 excel 标签的值,即表头名称
				//fmt.Println(fmt.Sprintf("%v , %v  %v  %v", i, colName, dataType.NumField(), fmt.Sprintf("%s%d", w.GetColumnName(i), 1)))
				f.SetCellValue(sheetName, fmt.Sprintf("%s%d", w.GetColumnName(i), 1), colName)
			}
		}

		// 填充数据
		for i := 0; i < dataValue.Len(); i++ {
			rowNum := i + 2
			rowValue := dataValue.Index(i)
			for j := 0; j < dataType.NumField(); j++ {
				field := dataType.Field(j)
				if field.Name == "BaseOrm" {
					f.SetCellValue(sheetName, fmt.Sprintf("%s%d", w.GetColumnName(j), rowNum), "")
				} else {
					colValue := rowValue.Field(j).Interface()
					f.SetCellValue(sheetName, fmt.Sprintf("%s%d", w.GetColumnName(j), rowNum), colValue)
				}
			}
		}

		// 保存 Excel 文件
		if err := f.SaveAs(fileName); err != nil {
			log.Fatal("无法保存 Excel 文件:", err)
		}

		// 设置响应头
		c.Header("Content-Type", "application/octet-stream")
		c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=%s", fileName))

		// 将文件内容输出给客户端
		c.File(fileName)
		// 删除临时文件
		if err := os.Remove(fileName); err != nil {
			log.Println("无法删除临时文件:", err)
		}
	} else {
		response.FailWithMessage("解析失败", c)
	}
}
func (w *WafCommonApi) ImportExcelApi(c *gin.Context) {
	file, err := c.FormFile("file") // "excelFile" 对应前端上传的文件字段名
	if err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	// 生成文件名
	fileName := time.Now().Format("20060102150405") + "import.xlsx"

2.效果图展示

请添加图片描述


三、学习资料下载

蓝奏云:https://qumaw.lanzoul.com/ipwmu2ytwp2f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值