drinke9 发布的文章

使用-h 命令查看具体参数

[email protected]:~/gogs$ ./gogs -h
NAME:
   Gogs - A painless self-hosted Git service

USAGE:
   gogs [global options] command [command options] [arguments...]

VERSION:
   0.11.43.0330

COMMANDS:
     web      Start web server
     serv     This command should only be called by SSH shell
     hook     Delegate commands to corresponding Git hooks
     cert     Generate self-signed certificate
     admin    Perform admin operations on command line
     import   Import portable data as local Gogs data
     backup   Backup files and database
     restore  Restore files and database from backup
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --help, -h     show help
   --version, -v  print the version

- 阅读剩余部分 -

需要配置两处地方!

  • nginx.conf
#在 http 块中 添加以下配置
fastcgi_intercept_errors on;
  • your.custom.conf
#在server块中添加
#有两种指定方式
error_page 404 /404.html; #当前配置默认路径是从nginx安装路径;
# OR 指定特定路由地址
# error_page 404 https://happyhack.cn/404.html;
#如需自定义路径,添加一个location块
location /404.html{
    root /data/wwwroot/errorpages;
}

也可以指定其他状态码到同一个页面。使用正则同样可以!

error_page 404 = 401 /your/errorpage.html;

直奔主题!

使用技巧

递增和递减

要代替以下实现:

$article = Article::find($article_id);
$article->read_count++;
$article->save();

你可以这样做:

$article = Article::find($article_id);
$article->increment('read_count');

以下这些方法也可以实现:

Article::find($article_id)->increment('read_count');
Article::find($article_id)->increment('read_count', 10); // +10
Product::find($produce_id)->decrement('stock'); // -1

模型的 boot() 方法

在一个 Eloquent 模型中,有个神奇的地方,叫 boot(),在那里,你可以覆盖默认的行为:

class User extends Model
{
    public static function boot()
    {
        parent::boot();
        static::updating(function($model)
        {
            // 写点日志啥的
            // 覆盖一些属性,类似这样 $model->something = transform($something);
        });
    }
}

- 阅读剩余部分 -

XSS(Cross Site Script)

跨站脚本攻击会像站点注入Html/JavaScript代码

  • 举个茄子:

在页面中的某个input输入框中,攻击者输入<script>alert('666')</script>,页面将弹出这个666,如果用户使用更加牛逼的JS代码,来获取用户存在客户端的数据,如getCookie(name)这类代码,那用户的数据则暴露给攻击者无疑。

  • 防范方法
  1. 后端过滤任何可疑HTML标签,最好过滤<,>这两个符号。
  2. 当然通过前端路由xss,那也很难解决,唯有后端对URL,进行规则验证.

CSRF(Cross Script Request forgery)

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。[1] 跟跨網站指令碼(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

  • 举个例子

某站点用户转账链接如下 http://exapmle.com/transfer?account=xiaohong&amount=1000&payfor=xiaoming

小红刚刚转账给小明1000元,登录信息未过期!然后又访问了攻击者的网站,该网站中诱导小红点击如下链接

http://exapmle.com/transfer?account=xiaohong&amount=1000&payfor=hack

那小红账户则会向hack用户继续转账。

  • 防范方法
  1. 检查Referer字段
    后端在重要操作路由中检查用户访问过来的头信息,如以上站点referer字段对应的应该和exapmle.com一样的头信息,如果不对则能识别出恶意访问!但是这种手段也有缺陷,攻击者可以绕过浏览器自定义头信息。
  2. 添加效验Token
    CSRF本质是欺骗用户访问自己设置的地址,那么要求用户在访问某些地址时候提供不存在浏览器Cookie中,且攻击者也无法伪造的数据作为效验,那么攻击者则束手无策啦!在form表单中添加一个隐藏input放入后台加密的token值,用户提交过来在验证token是否正确!

参考资料

weiki