Watch Print
Author: hu@yifeishu.com Last modified: 0000-00-00 00:00 Helpful: 8 Visits: 1690

web安全问题

安全问题是web应用很容易忽视的部分,而其产生的后果对于企业而言往往是灾难性的.此处尝试分析攻击者常见攻击手段以及防御办法.

前端漏洞

前端一般需要关注三种漏洞:

  1. Cross Site Scripting简称XSS(CSS容易与Cascading Style Sheets混淆)
  2. Cross Site Request Forgery简称CSRF
  3. Server Side Request Forgery简称SSRF

1. XSS跨站脚本攻击

产生条件:

用户在输入框或地址栏输入内容后,前端直接当做DOM渲染,或是提交到服务器,服务器未做处理,直接渲染到HTML模板内.

示例:

// Frontend
const content = document.querySelector('#input').value;
document.body.innerHTML = value;

// Backend
const value = req.body.userInput;
res.render(`<body>${value}</body>`);

场景:

分析:

用户输入攻击者提供的脚本代码被直接执行,当前用户权限即被窃取.若服务器将输入内容开放给其他用户访问,则所有访问者同样会被窃取信息.

防御方法:

2. CSRF跨站请求伪造

产生条件:

用户已登录A站点,攻击者诱导用户访问B站点,从B站点向A站点发出请求,伪造用户行为.

示例:

// b.com/page
<form action="a.com" method="POST">
    <input type="text" name="bank_id" />
    <input type="text" name="money" value="9999" />
    <button type="submit">Ok</button>
</form>

分析:

攻击者直接向正常网站发送请求,模拟用户行为,攻击过程甚至可对用户完全隐匿.

防御方法:

3. SSRF服务端请求伪造

产生条件:

服务端接收URL参数,并直接向此URL发送请求.

示例:

const resourceURL = req.query.url;
request(url, function(data) {
    // handler...
    res.send(data);
});

场景:

分析:

攻击者传入内网地址,服务端直接作为跳板访问敏感数据.

防御方法:

后端漏洞

以下简单列出几种后端攻击方式:

1. SQL注入

介绍: 服务器接收客户端传入的值作为SQL参数,绝对不能直接使用字符串拼接的方式,否则攻击者可以执行危险SQL语句.

示例:

// body: { username: "smith AND pwd='123456'" }
const username = req.body.username;
mysql.exec('SELECT uid FROM user WHERE name=' + username);

防御: 通用解决方法是参数化查询,参数用?作为占位符,替换?的值将自动被检查.

数据库连接工具一般默认支持此方式.

2. 伪造域名解析

介绍: 攻击者购买相似域名,解析到正常ip地址,服务正常使用,当攻击者修改DNS解析到攻击者服务器之后,可获取用户浏览器发送的cookie.

防御:

  1. 使用https,由于两个域名SSL证书不匹配,用户访问时浏览器会警告用户.
  2. 正常服务每次收到请求后检测URL域名是否与本站一致,如果不一致则301跳转到正常域名.

3. 目录穿越

介绍: 服务器接收资源名读写资源,没有检测文件名安全性,攻击者可以访问,修改其它目录的文件内容.

示例:

// body: { filename: "../../file" }
const filename = req.body.filename;
fs.readFile(path + filename, function(data) {
    res.send(data);
});

防御: 接收资源名后检测是否包含.. /等目录跳转字符.

4. 文件上传

介绍: 上传资源时,服务器应限制文件大小,检测同名文件,避免内存溢出,硬盘占满,业务出现漏洞等问题.

5. 命令注入

介绍: 用户输入内容不可以直接用作shell调用,应屏蔽敏感命令.比如rm,addUser等.

6. 短信接口/邮件接口频次控制

介绍:IP限制敏感接口调用频次,防止被攻击者用作短信炸弹,邮件炸弹.

7. 开发者/运维权限控制

介绍: 企业级项目应当对生产环境操作权限严格控制,完整记录操作日志,开发人员不应该拥有生产环境控制权限.应当保证灾备系统稳定可靠,数据丢失能快速找回.

×
Is this page helpful?
Yes No