golang-sqlx-clickhouse-tuple

Go查询CH 数据 tuple 转数组

Go 查询 ClickHouse

业务场景:需要使用 GolangCilckHouse 集群中查询数据,查询的 SQL 以模版的形式存放在 Postgresql 数据库中.
使用的 driversqlx

  • 使用CH 在私有集群中,报漏的端口只有 http8123 所以需要更改拨号协议
  • 另外如果 ClickHouse 是必要的依赖服务,每次获取查询对象 需要先检查一下 Ping()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// ClickHouse配置参数
type ClickHouse struct {
Host string
Port int
User string
Password string
DBName string
ReadTimeout uint
WriteTimeout uint
Parameters string // debug=true
}
// DSN 数据库连接串
func (a ClickHouse) DSN() string {
// dsn := fmt.Sprintf("http://%s:%s@%s:%d/%s?read_timeout=%d&write_timeout=%d", a.User, a.Password, a.Host, a.Port, a.DBName, a.ReadTimeout, a.WriteTimeout)
return fmt.Sprintf("http://%s:%s@%s:%d/%s", a.User, a.Password, a.Host, a.Port, a.DBName)
}

connect, err := sqlx.Open("clickhouse", "tcp://127.0.0.1:9000?compress=true&debug=true")
//connect, err := sqlx.Open("clickhouse", "http://127.0.0.1:8123?compress=true&debug=true")

checkErr(err)
if err := connect.Ping(); err != nil {
if exception, ok := err.(*clickhouse.Exception); ok {
fmt.Printf("[%d] %s \n%s\n", exception.Code, exception.Message, exception.StackTrace)
} else {
fmt.Println(err)
}
return
}

Row 转 Map

  • 因为查询的 SQL 模版较多, 不想定义对应的结构体 :smaile:
    所以对查询数据做了一个 Row2Map 的处理,这样获取到的数据 直接转换为 JSON 输出到前端
阅读全文

html-a-noreferer

使用 a 标签的问题

HTMl:<a></a> noreferrer noopener nofollow

在使用 VSCode 编辑 Html 代码时:提示

Line 71:36: Using target="_blank" without rel="noopener noreferrer" is a security risk: see https://mathiasbynens.github.io/rel-noopener react/jsx-no-target-blank

我大概查看了一下相关的漏洞描述,就直接加上了对应的 rel="noopener noreferrer" 属性,以为就这样完事了,没问题!


可到了测试环境发现有一个跳转到下载链接的接口一直身份验证不通过
就去往下排查了一下,发现身份验证逻辑中有:在指定环境下验证请求头中的 referer 属性是否等于 host
的逻辑,

然后就去检查了相关的请求头信息,发现问题了: 没有 referer 属性;

最初以为是Nginx代理接口的时候没有转发对于的头信息,经过排查发现并不是.

后来有继续对比线上环境的接口,同样浏览器下同一个接口出现了 线上环境 请求头与 测试环境请求头不一致的问题.
重点表现: Request Header 中的 Referrer Policy: no referer.

这才知道: a 标签的 noreferrer 会导致跳转地址的请求重设 Referrer Policy

Referrer Policy:

策略

  • No Referrer:任何情况下都不发送Referrer信息
  • No Referrer When Downgrade:仅当协议降级(如HTTPS页面引入HTTP资源)时不发送Referrer信息。是大部分浏览器默认策略。
  • Origin Only:发送只包含host部分的referrer.
  • Origin When Cross-origin:仅在发生跨域访问时发送只包含host的Referer,同域下还是完整的。与Origin Only的区别是多判断了是否Cross-origin。协议、域名和端口都一致,浏览器才认为是同域。
  • Unsafe URL:全部都发送Referrer信息。最宽松最不安全的策略。

使用

  • CSP(Content-Security-Policy)

  • 标签

    • meta
    • a

    html页面的meta标签指定。

    <meta name=referrer content=no-referrer>

    a 标签的referer属性作用的只是当前标签。
    策略只有三中:不传、只host、都传
    针对单个链接设置的策略优先级高。

    <a href="http://example.com" rel="noopener noreferrer" >xxx</a>

  • 最后去掉了 a 标签的 rel=”noopener noreferrer” 😊

laravel-mysql2pgsql

Laravel mysql to pgsql

laravel 项目直接修改配置文件即可切换 driver

  • php 开启 pdo_pgsql.so extension php.ini
    • 下载源码-解压-CD…
    • phpize
    • 执行 ./configuration with-php-config=php-config
    • make && make install
    • vim php.ini extensions pdo_pgsql
  • 时区问题
    • 使用 工具从 mysql 导入到 pgsql 的数据存在时区 例如: 2020-08-19 19:00:12+08
    • 需要修改所有 ModeldateFormat
    • protected $dateFormat = 'Y-m-d H:i:sP';
    • model->save(): 自动更新时间逻辑 freshTimestamp()
    • 数据查询渲染 serializeDate()
    • Carbon 类的使用 && Datetime
    • 扩展php中的其他时区格式: e/O/P/T/Z 等含义
    • 相关代码
阅读全文

DNS 解析keywords

DNS 解析keywords

1
2
graph LR
A(Client)-->B(Local DNS)
1
2
3
4
5
Client --> hosts文件 
--> DNS Service Local Cache --> DNS Server (recursion递归查看本地配置的解析文件)
--> Server Cache
--> iteration(迭代) --> 根 --> 顶级域名DNS --> 二级域名DNS…
最终本地dns查看结果后返回给客户端
  • DNS 解析,若缓存命中就会直接返回缓存结果,不再进行递归DNS查询
阅读全文

初识图数据库:neo4j

图数据库是什么

在计算机科学中,图数据库(英语:graph database,GDB)是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。

图数据库是一种非关系型数据库,以解决现有关系数据库的局限性。图模型明确地列出了数据节点之间的依赖关系,而关系模型和其他NoSQL数据库模型则通过隐式连接来链接数据。图数据库从设计上,就是可以简单快速地检索难以在关系系统中建模的复杂层次结构的。
图数据库wiki

阅读全文