OWASP-ZAP OWASP ZAP 是世界上最受欢迎的免费安全审计工具之一,由数百名国际志愿者积极维护。它可以帮助你在开发和测试应用程序时自动查找Web应用程序中的安全漏洞。 代理 owasp zap 默认使用 8080 端口开启http代理,如果我们想修改其默认代理,在 【工具】- 【选项】- 【本地代理】 进行设置。 浏览器代理设置成和owasp zap一样即可。 访问目标项目地址zap就会拦截了。 网站证书不信任问题 owasp zap 进行代理时,浏览器访问不信任证书,需要在zap上导出证书,在导入浏览器。 导出owasp zap的证书的方法【设置】-【dynamic ssl certificates】。 强制浏览 owasp zap的强制目录浏览选择使用owasp zap自带的directory-list-1.0.txt 目录字典进行尝试爬取。
Zap是由Uber开发的高性能Go日志库,特别适合后端服务。 入门: 第一目:为什么要选择Zap? 在Go语言的日志库中,流行的有 zap、logrus...甚至还有Go自带的原生的log。 高并发场景下性能也较低(文末有解释) 第二目:安装Zap go get -u go.uber.org/zap 第三目:go语言简答的启动 package main import ( "go.uber.org "user-api"), zap.Time("start_time", time.Now()), ) // 打印 logger.Warn("数据库连接缓慢", zap.Duration () // 修改配置 config.Level = zap.NewAtomicLevelAt(zap.DebugLevel) // 设置日志级别 config.OutputPaths = [] () defer logger.Sync() logger.Info("开发模式日志", zap.String("url", "/api/users"), zap.Int("status
OWASP ZAP OWASP ZAP,全称:OWASP Zed Attack Proxy攻击代理服务器是世界上最受欢迎的免费安全工具之一。 ZAP可以帮助我们在开发和测试应用程序过程中,自动发现 Web应用程序中的安全漏洞。另外,它也是一款提供给具备丰富经验的渗透测试人员进行人工安全测试的优秀工具。 项目地址: 下载地址:github: https://github.com/zaproxy/zaproxy/wiki/Downloads 食用指南 启动 在菜单中找到zap的图标,单击即可启动。 初次打开ZAP时,会看到以下对话框,询问是否要保持ZAP进程。 保存进程则可以让你的操作得到保留,下次只要打开历史进程就可以取到之前扫描过的站点以及测试结果等。 如果只是想先简单尝试ZAP功能,可以选择第三个选项,那么当前进程暂时不会被保存。 快速测试 ZAP右上方区域是快速测试窗口,可以开启非常傻瓜式的渗透测试。
脚本 zap-api-scan.py 包含在Weekly和 Live ZAP Docker 镜像中,它也将包含在下一个 稳定镜像中。 要使用 API 扫描脚本,您只需使用以下命令: docker pull owasp/zap2docker-weekly docker run -t owasp/zap2docker-weekly zap-api-scan.py ZAP command line options e.g. 对于使用 OpenAPI/Swagger 定义的 API,您可以通过 ZAP 命令行选项指定希望 ZAP 使用的值。 Docker 实例中名为 /zap/wrk 的文件夹。
1.前言 zap 是我个人比较喜欢的日志库,是 uber 开源的,有较好的性能。很多开源 Go 项目都使用它作为日志组件。 2.安装使用 安装 go get -u go.uber.org/zap 快速入门 logger, _ := zap.NewProduction() defer logger.Sync() // flushes = zapcore.NewCore(zapcore.NewConsoleEncoder(zapLoggerEncoderConfig), syncWriter, level) zapLogger = zap.New (zapCore, zap.AddCaller(), zap.AddCallerSkip(1)) 记得在程序退出时调用 zapLogger.Sync(),不然会造成丢失日志。
文章目录 1.zap 是什么? 2.zap 快速上手 3.Zap 实现日志滚动 4.小结 参考文献 1.zap 是什么? zap 性能比较优秀,它使用了 Zero Allocation 的设计理念,在不影响性能的情况下尽量避免内存分配。 2.zap 快速上手 1.安装 Zap 使用 Golang Zap 需要先安装它。 go get go.uber.org/zap 2.创建 Logger 在使用 Zap 记录日志前,您需要创建一个 Logger 实例。Logger 是一个核心类型,用于管理日志记录的配置和输出。 logger, err := zap.NewProduction(zap.WithLevel(zap.DebugLevel)) if err ! 那么在 Zap 中我们该如何实现这个功能呢? Zap 本身并没有实现滚动日志功能,但是我们可以使用第三方滚动插件实现。
序 本文主要研究一下golang的zap的hook image1.png 实例 func hookDemo() { count := &atomic.Int64{} logger, _ := zap.NewProduction(zap.Hooks(func(entry zapcore.Entry) error { fmt.Println("count:", count.Inc /zap_demo.go:29","msg":"failed to fetch URL","url":"https://golang.org","attempt":3,"backoff":1} count : 1 msg: failed to fetch URL {"level":"info","ts":1608045721.769826,"caller":"zap/zap_demo.go:35","msg doc zap
序 本文主要研究一下golang的zap的level Level zap@v1.16.0/zapcore/level.go // A Level is a logging priority. return fmt.Sprintf("Level(%d)", l) } } Level为int8类型,其中DebugLevel值最小,FatalLevel值最大 LevelEnabler zap ) bool { return lvl >= l } LevelEnabler接口定义了Enabled方法,Level的Enabled方法判断lvl是否大于等于l levelToColor zap @v1.16.0/zapcore/level_strings.go import "go.uber.org/zap/internal/color" var ( _levelToColor = doc zap
序 本文主要研究一下golang的zap的hook 实例 func hookDemo() { count := &atomic.Int64{} logger, _ := zap.NewProduction (zap.Hooks(func(entry zapcore.Entry) error { fmt.Println("count:", count.Inc(), "msg:", entry.Message /zap_demo.go:29","msg":"failed to fetch URL","url":"https://golang.org","attempt":3,"backoff":1} count : 1 msg: failed to fetch URL {"level":"info","ts":1608045721.769826,"caller":"zap/zap_demo.go:35","msg doc zap
Zap 的主要特点如下: 高性能:Zap 在设计时就非常注重性能,比标准库 log 包快几个数量级,即使在高并发场景下也能保持出色的性能表现。 级别控制:Zap 提供了丰富的日志级别控制,可以动态修改日志级别,从而只输出关键日志或调试日志。 编码支持:Zap 内置支持 JSON 和控制台的日志编码,并提供了钩子机制来扩展其他编码格式。 通过 Zap,开发者可以获得高效、灵活且易于管理的日志解决方案,从而更好地监控和调试应用程序。 下面我们来进行zap日志库的上手实践。 // indirect 小试牛刀 下面我们先来一个基础的Case来熟悉一下zap日志库的的使用语法: // // TestLogZap // @Description: 测试zap日志 (core, zap.AddCaller(), zap.Development()) // 创建 Logger,添加调用者和开发模式 defer logger.Sync
序 本文主要研究一下golang的zap的Sink Sink zap@v1.16.0/sink.go type Sink interface { zapcore.WriteSyncer ) writer, close, err := zap.Open("mq://192.168.99.100:9876/log") if err ! (zap.NewProductionEncoderConfig()), writer, zap.DebugLevel)).Sugar() logger.Info("hello") } type 的sink factory,而zap.Open则会解析url来找到对应的sink factory创建对应的sink,即writer。 doc zap
序 本文主要研究一下golang的zap的ZapKafkaWriter OIP (99).jpeg ZapKafkaWriter package logger import ( "errors " "sync" "sync/atomic" "syscall" ) // ZapKafkaWriter is a zap WriteSyncer (io.Writer) that doc zap zap_writer
序 本文主要研究一下golang的zap的WriteSyncer WriteSyncer zap@v1.16.0/zapcore/write_syncer.go type WriteSyncer interface type Writer interface { Write(p []byte) (n int, err error) } Writer接口定义了Write方法 lockedWriteSyncer zap ,它实现了WriteSyncer接口,它对Write和Sync方法都加了锁,内部委托的WriteSyncer;Lock方法用于创建lockedWriteSyncer multiWriteSyncer zap 然后会用multierr.Append(writeErr, err)来包装err;NewMultiWriteSyncer方法用于创建multiWriteSyncer CombineWriteSyncers zap } newSink方法解析url,然后通过scheme找到对应的factory,调用factory创建Sink;_sinkFactories默认注册了newFileSink newFileSink zap
序 本文主要研究一下golang的zap的NewTee java-streams-1.png NewTee zap@v1.16.0/zapcore/tee.go type multiCore []Core } } NewTee方法根据cores个数来返回不同的Core,若len(cores)为0,返回NewNopCore,若为1则返回cores[0],默认返回[]Core multiCore zap ()), zapcore.AddSync(buf), zap.InfoLevel), zapcore.NewCore(zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig ()), zapcore.Lock(os.Stdout), zap.InfoLevel), ) logger := zap.New(teeCore) logger.Info("hello doc zap
序 本文主要研究一下golang的zap的Sink OIP - 2020-12-22T232221.489.jpeg Sink zap@v1.16.0/sink.go type Sink interface ) writer, close, err := zap.Open("mq://192.168.99.100:9876/log") if err ! (zap.NewProductionEncoderConfig()), writer, zap.DebugLevel)).Sugar() logger.Info("hello") } type 的sink factory,而zap.Open则会解析url来找到对应的sink factory创建对应的sink,即writer。 doc zap
序 本文主要研究一下golang的zap的CheckedEntry Entry zap@v1.16.0/zapcore/entry.go type Entry struct { Level EntryCaller Stack string } Entry定义了Level、Time、LoggerName、Message、Caller、Stack属性 CheckedEntry zap cores []Core } CheckedEntry内嵌了Entry,定义了ErrorOutput、dirty、CheckWriteAction、cores属性 reset zap ce.cores = ce.cores[:0] } reset会重置CheckedEntry的Entry、ErrorOutput、dirty、CheckWriteAction、cores属性 Write zap doc zap
序 本文主要研究一下golang的zap的NewExample 91573_bust=0-Logging Request Bodies For Golang REST APIs-true.png NewExample zap@v1.16.0/logger.go func NewExample(options ...Option) *Logger { encoderCfg := zapcore.EncoderConfig /entry.go:234 +0x585 go.uber.org/zap. @v1.16.0/sugar.go:234 +0xf6 go.uber.org/zap. /go/pkg/mod/go.uber.org/zap@v1.16.0/sugar.go:123 main.exampleDemo() /zap_demo.go:19 +0x277 main.main
序 本文主要研究一下golang的zap的SugaredLogger using-apache-kafka-from-go-23-638.jpg SugaredLogger zap@v1.16.0/ 、info、warn、error、panic、dpanic、fatal这几种方法(使用fmt.Sprint的默认格式),另外还有带f的支持format,带w的方法则支持with键值对 level zap FatalLevel = zapcore.FatalLevel ) zap内部的level分为debug、info、warn、error、dpanic、panic、fatal这几种 DPanic lvl,如果是zapcore.DPanicLevel,则会进一步判断是否是development模式,如果是会设置ce.Should(ent, zapcore.WriteThenPanic) 小结 zap 的默认格式),另外还有带f的支持format,带w的方法则支持with键值对 DPanic在development下的效果跟panic效果类似,在非development下则退化为error模式 doc zap
序 本文主要研究一下golang的zap的SugaredLogger SugaredLogger zap@v1.16.0/sugar.go type SugaredLogger struct { debug、info、warn、error、panic、dpanic、fatal这几种方法(使用fmt.Sprint的默认格式),另外还有带f的支持format,带w的方法则支持with键值对 level zap FatalLevel = zapcore.FatalLevel ) zap内部的level分为debug、info、warn、error、dpanic、panic、fatal这几种 DPanic DPanic 方法会判断lvl,如果是zapcore.DPanicLevel,则会进一步判断是否是development模式,如果是会设置ce.Should(ent, zapcore.WriteThenPanic) 小结 zap 的默认格式),另外还有带f的支持format,带w的方法则支持with键值对 DPanic在development下的效果跟panic效果类似,在非development下则退化为error模式 doc zap
OWASP ZAP是世界上最受欢迎的免费安全工具之一。是一款web application 集成渗透测试和漏洞工具。它可以帮助我们自动发现Web应用程序中的安全漏洞。 apt-get install zaproxy 启动 我们只需只需zaproxy命令或者在菜单搜索zap即可运行程序。 启动ZAP时,会弹出弹窗提示是否要保留会话。 拦截修改数据包 和burp类似,我们利用zap也可以对当前的数据包进行修改。