Web开发安全-攻击篇 3| 青训营笔记

187 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第7天

Web开发安全-攻击篇

Web开发安全是程序开发的重中之重,一不小心,用户隐私就被泄露了,再严重一点,公司直接垮了,程序员也只能跑路了

sql注入

sql注入是一种很常见的数据库攻击,比如多年前,有人在车牌上写了一条删除数据库的sql语句,然后被注入到数据库中,我们就成功的删库的“壮举”。

  • 原理 黑客使用sql参数恶意注入,然后请求服务器,然后服务器运行sql代码恶意sql通过一些参数 获取、修改、删除数据等操作。。。

  • sql注入demo 如果我们使用字符串拼接的方式对sql语句进行操作,我们写的sql语句将很容易被注入。

  • 代码示例:

public async renderFrom(ctx){
    const{name,form_id}=ctx.query;
    const result =await sql.query(`SELECT a,b,c FROM table WHERE username =${username} AND form_id =${form_id}`);
    ctx.body=renderForm(result);
}

当黑客作为用户,在name中进行sql注入:

  • 代码示例:
name: "any ;DROP TABLE table;"
// 我们使用字符串拼接sqlSELECT XXX FROM XXX;DROP TABLE table;

然后,我们就实现了删库跑路的壮举。

Injection不只是sql

Injection不止于SQL: 还有:

  • CLI
  • OS command
  • Server-Side Request Forgery(SSRF)------服务器伪造请求(并不是Injection,但原理相似)

CLI--执行

public async converVideo(ctx){
    const {video,options}=ctx.request.body;
    exec(`convert-cli ${video} -o ${options}`);
    ctx.body="ok";
    }

当黑客输入为: && rm -rf xxx

fetch("/api",{
    method:"POST",
    body:JSON.stringify({
        options:` && rm -rf xxx`
        })
    });
    //注入后语句:
    const command=`convert-cli video -o && rm -rf xxx `

Injection ---读取、修改

假如一个大企业不小心暴露了一些重要文件,被黑客读取到,然后把某些文件修改到竞争对手的链接中,然后竞争对手架不住第三方的大流量使得服务器直接挂掉,这样就让竞争对手直接下线了(真刑)。

SSRF

特点:

  • 请求【用户自定义】的callback URL
  • web server 通常有内网访问权限
  • 代码示例:
public async webhook(ctx){
    //callback可能是内网url
    xtc.body=await fetch(ctx.query.callback);
    //访问callback===暴露内网信息
}

Denial of Service(Dos)

通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而产生雪崩效应。