web应用开发中不可避免需要考虑web应用的安全问题,那么常见的安全风险包含哪些呢?

Web应用常见的安全风险

 在web应用开发中可能存在以下的安全风险:

安全风险Top 10
A1:2017-注入 将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。
A2:2017-失效的身份认证 通常,通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。
A3:2017-敏感数据泄露 许多Web应用程序和API都无法正确保护敏感数据,例如:财务数据、医疗数据和PII数据。攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据。
A4:2017-XML 外部实体(XXE) 许多较早的或配置错误的XML处理器评估了XML文件中的外部实体引用。攻击者可以利用外部实体窃取使用URI文件处理器的内部文件和共享文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻击。
A5:2017-失效的访问控制 未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。
A6:2017-安全配置错误 安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云存储、错误的 HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。因此,我们不仅需要对所有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级它们。
A7:2017-跨站脚本(XSS) 当应用程序的新网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建 HTML或JavaScript 的浏览器 API 更新现有的网页时,就会出现 XSS 缺陷。XSS 让攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点。

A8:2017-不安全的反序列化

不安全的反序列化会导致远程代码执行。即使反序列化缺陷不会导致远程代码执行,攻击者也可以利用它们来执行攻击,包括:重播攻击、注入攻击和特权升级攻击。
A9:2017-使用含有已知漏洞的组件 组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知漏洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。同时,使用含有已知漏洞的组件的应用程序和API可能会破坏应用程序防御、造成各种攻击并产生严重影响。
A10:2017-不足的日志记录和监控 不足的日志记录和监控,以及事件响应缺失或无效的集成,使攻击者能够进一步攻击系统、保持持续性或转向更多系统,以及篡改、提取或销毁数据。大多数缺陷研究显示,缺陷被检测出的时间超过200天,且通常通过外部检测方检测,而不是通过内部流程或监控检测。

 那么,这些风险有什么办法进行避免呢?——WAF

1、WAF

  Web 应用防火墙 (WAF-Web Application Firewall) 旨在保护 Web 应用免受各类应用层攻击,例如跨站点脚本 (XSS)、SQL 注入,以及 cookie 中毒等。应用是您重要数据的网关,因此针对应用发起的攻击就成为了造成漏洞的主要原因。

  有了 WAF 就可以拦截一系列企图通过入侵系统来泄漏数据的攻击。 

 工作原理:

  WAF 通过过滤、监控和拦截恶意 HTTP 或 HTTPS 流量对 Web 应用的访问来保护您的 Web 应用,并能够阻止未经授权的数据离开应用。因此,WAF 需要遵守一套策略,帮助其确定哪些流量是恶意的,哪些流量是安全的。

  WAF 的操作方式与代理服务器类似,虽然同为“中介”,但后者旨在保护客户端身份,前者却被称为反向代理,因为其使命在于保护 Web 应用服务器免受潜在恶意客户端的影响。

  WAF 不拘泥于形式,是软件、设备,亦是即服务。策略可定制,以满足您对 Web 应用或 Web 应用组合的独特需求。虽然许多 WAF 要求您定期更新策略以解决新的漏洞,但机器学习的进步使一些 WAF 能够自动更新。随着威胁环境愈发复杂和不确定,这种自动化变得越来越重要。

 

 IPS与WAF区别:

  IPS :入侵防御系统,一款目标范围更加广泛的安全产品。IPS 通常以签名和政策为基础。换言之,它可以根据签名数据库和既定政策,检查众所周知的漏洞和攻击载体。IPS 根据数据库和策略建立一个标准,然后会在流量偏离标准时发出警报。随着时间的推移,新漏洞层出不穷,签名和策略也会积少成多。一般来说,IPS 保护对象是一系列协议类型的流量,例如 DNS、SMTP、TELNET、RDP、SSH 和 FTP。通常情况下,IPS 会运行于第 3 层和第 4 层并对其提供保护,相较于网络层和会话层,对应用层(第 7 层)提供的保护力度着实有限。

  Web 应用防火墙 (WAF): WAF设计专为保护应用层而生,旨在分析应用层上各 HTTP 或 HTTPS 请求。它通常会感知用户、会话和应用,了解其背后的 Web 应用及其提供的服务。正因如此,WAF 可以看作是用户和应用之间的中介,并会提前对往来于两者之前的通信进行分析。传统的 WAF 确保仅执行允许的操作(基于安全策略)。对于许多组织来说,WAF 是应用值得信赖的第一道防线,尤其是在抵御 前面描述的10大安全风险。

 WAF部署方式:

  • 基于云服务商提供的WAF:如AWS WAF、Amazon WAF
  • 基于软件实现:如:Nginx方式

2、基于Nginx实现的WAF

 ngx_lua_waf是一个基于ngx_lua的web应用防火墙。可以实现WAF的相关防护功能。

 安装步骤:

  • 安装依赖包:

    yum -y install gcc gcc-c++ autoconf automake make unzip
    yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
  • 安装LuaJIT2.0

    下载luajit 2.0并安装
    cd /usr/local/src/
    wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
    tar xf LuaJIT-2.0.5.tar.gz
    cd LuaJIT-2.0.5
    make && make install
  • 安装ngx_devel_kit(NDK(nginx development kit)模块是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现。)
    cd /user/local/src/
    wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz
    tar xf v0.3.0.tar.gz
  • 安装nginx_lua_module
    wget https://github.com/openresty/lua-nginx-module/archive/v0.10.20.tar.gz
    tar xf v0.10.20.tar.gz
  • 导入环境变量
    echo "export LUAJIT_LIB=/usr/local/lib" >> /etc/profile
    echo "export LUAJIT_INC=/usr/local/include/luajit-2.0" >> /etc/profile
    source /etc/profile
  • 编译安装Nginx
    cd /usr/local/src/
    wget http://nginx.org/download/nginx-1.21.0.tar.gz
    tar xf nginx-1.21.0.tar.gz
    cd nginx-1.21.0
    useradd -s /sbin/nologin -M www
    cd nginx-1.21.0
    ./configure --user=www --group=www \
    --prefix=/usr/local/nginx-1.21.0 \
    --with-http_stub_status_module \
    --with-http_ssl_module \
    --with-http_gzip_static_module \
    --pid-path=/usr/local/nginx-1.21.0/nginx.pid \
    --with-http_realip_module \
    --add-module=/usr/local/src/ngx_devel_kit-0.3.0 \
    --add-module=/usr/local/src/lua-nginx-module-0.10.20 \
    --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"
    make -j2
    make install
    ln -s /usr/local/nginx-1.14.0 /usr/local/nginx
  • 新建/usr/local/nginx/logs/hack/攻击日志目录,并赋予nginx用户对该目录的写入权限。
    mkdir -p /usr/local/nginx/logs/hack/
    chown -R www.www /usr/local/nginx/logs/hack/
    chmod -R 755 /usr/local/nginx/logs/hack/

  一键部署命令:  

#!/bin/bash
#Author: Template
yum -y install gcc gcc-c++ autoconf automake make unzip wget
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
cd /usr/local/src/ [ ! -f "LuaJIT-2.0.5.tar.gz" ] && wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
[ ! -f "nginx-1.14.0.tar.gz" ] && wget http://nginx.org/download/nginx-1.21.0.tar.gz &&
[ ! -f "v0.3.0.tar.gz" ] && wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz
[ ! -f "v0.10.13.tar.gz" ] && wget https://github.com/openresty/lua-nginx-module/archive/v0.10.20.tar.gz
[ ! -f "master.zip" ] && wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip --no-check-certificate ls *.tar.gz | xargs -n 1 tar xf cd LuaJIT-2.0.5 && make && make install && cd .. echo "export LUAJIT_LIB=/usr/local/lib" >> /etc/profile && \
echo "export LUAJIT_INC=/usr/local/include/luajit-2.0" >> /etc/profile
source /etc/profile
cd nginx-1.21.0 && useradd -s /sbin/nologin -M www
./configure --user=www --group=www \
--prefix=/usr/local/nginx-1.21.0 \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--pid-path=/usr/local/nginx-1.21.0/nginx.pid \
--with-http_realip_module \
--add-module=/usr/local/src/ngx_devel_kit-0.3.0 \
--add-module=/usr/local/src/lua-nginx-module-0.10.20 \
--with-ld-opt="-Wl,-rpath,$LUAJIT_LIB" && make -j8 && make install && ln -s /usr/local/nginx-1.21.0 /usr/local/nginx mkdir -p /usr/local/nginx/logs/hack/ && chown -R www.www /usr/local/nginx/logs/hack/ && chmod -R 755 /usr/local/nginx/logs/hack/ sed -i '25 a lua_package_path \"/usr/local/nginx/conf/waf/?.lua\";\nlua_shared_dict limit 10m;\ninit_by_lua_file /usr/local/nginx/conf/waf/init.lua;\naccess_by_lua_file /usr/local/nginx/conf/waf/waf.lua;' /usr/local/nginx/conf/nginx.conf cd /usr/local/src/ && unzip master.zip -d /usr/local/nginx/conf/ && mv /usr/local/nginx/conf/ngx_lua_waf-master /usr/local/nginx/conf/waf /usr/local/nginx/sbin/nginx

 使用方式:

  nginx安装路径假设为:/usr/local/nginx/conf/

  把ngx_lua_waf下载到conf目录下,解压命名为waf

wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip
unzip master.zip -d /usr/local/nginx/conf/
mv /usr/local/nginx/conf/ngx_lua_waf-master /usr/local/nginx/conf/waf

  在nginx.conf的http段添加

lua_package_path "/usr/local/nginx/conf/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /usr/local/nginx/conf/waf/init.lua;
access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;

  配置config.lua里的waf规则目录(一般在waf/conf/目录下)

RulePath = "/usr/local/nginx/conf/waf/wafconf/" #绝对路径如有变动,需对应修改

  然后重启nginx即可.  

RulePath = "/usr/local/nginx/conf/waf/wafconf/"
--规则存放目录
attacklog = "off"
--是否开启攻击信息记录,需要配置logdir
logdir = "/usr/local/nginx/logs/hack/"
--log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限
UrlDeny="on"
--是否拦截url访问
Redirect="on"
--是否拦截后重定向
CookieMatch = "on"
--是否拦截cookie攻击
postMatch = "on"
--是否拦截post攻击
whiteModule = "on"
--是否开启URL白名单
black_fileExt={"php","jsp"}
--填写不允许上传文件后缀类型
ipWhitelist={"127.0.0.1"}
--ip白名单,多个ip用逗号分隔
ipBlocklist={"1.0.0.1"}
--ip黑名单,多个ip用逗号分隔
CCDeny="on"
--是否开启拦截cc攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
CCrate = "100/60"
--设置cc攻击频率,单位为秒.
--默认1分钟同一个IP只能请求同一个地址100次
html=[[Please go away~~]]
--警告内容,可在中括号内自定义
备注:不要乱动双引号,区分大小写

参考:

 OWASP Top10

 https://github.com/EnableSecurity/wafw00f

 https://www.bilibili.com/video/BV1tt4y167CG/

 https://github.com/loveshell/ngx_lua_waf

Web应用安全防护-WAF的更多相关文章

  1. Web应用防火墙云WAF详细介绍

    Web应用防火墙,或叫Web应用防护系统(也称为:网站应用级入侵防御系统.英文:Web Application Firewall,简称: WAF).利用国际上公认的一种说法:Web应用防火墙是通过执行 ...

  2. 前端面试---常见的web安全及防护原理

    一.常见的web安全及防护原理 1.sql注入原理 就是通过把sql命令插入到web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 防护,总的来说有以下几点: 1. ...

  3. Web安全--XSS现代WAF规则探测及绕过技术

    XSS现代WAF规则探测及绕过技术初始测试 1.使用无害的payload,类似<b>,<i>,<u>观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过 ...

  4. nginx + lua 构建网站防护waf(一)

    最近在帮朋友维护一个站点.这个站点是一个Php网站.坑爹的是用IIS做代理.出了无数问题之后忍无可忍,于是要我帮他切换到nginx上面,前期被不断的扫描和CC.最后找到了waf这样一个解决方案缓解一下 ...

  5. web安全及防护

    本文将对web方面的安全问题以及相应的防护方法进行一个简单的介绍. SQL注入(SQL Injection) 原理:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺 ...

  6. 常见的web安全及防护原理

    1.0 sql注入 sql注入原理:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. sql注入防护: 1.永远不要信任用户的输入,要 ...

  7. 宝塔Linux面板搭建与安全狗安装(WEB服务器搭建与WAF安装)

    环境 系统:CentOS 7.3 (64位) 软件: 宝塔Linux 7.7 网站安全狗Linux-Apache版V2.3.18809(64位) 宝塔面板 下载和安装 网址:https://www.b ...

  8. phpstudy 最新版linux 面板 web防火墙后门防护功能教程

    phpstudy linux 面板针对服务器和网站做了全面的安全防护措施,尽可能的防范网站被入侵,留置后门风险,本篇文章着重介绍phpstudy linux 面板其中的一项安全功能 [网站防火墙]之[ ...

  9. web安全漏洞防护

    Password type input with autocomplete enabled The autocomplete attribute works with the following &l ...

随机推荐

  1. python+selenium+unittest发送Mail163邮件(PO)

    一.如下为项目的目录分布: 二.数据驱动yaml 三.Mail163登录测试用例编写 四.163邮件配置 五.Mail163测试用例执行: 六.邮件执行情况如下:

  2. UI自动化学习笔记- PO模型介绍和使用

    一.PO模型 1.PO介绍:page(页面) object(对象) 在自动化中,Selenium 自动化测试中有一个名字经常被提及 PageObject (思想与面向对象的特征相同),通常PO 模型可 ...

  3. LCT(Link-Cut-Tree)

    LCT(Link-Cut-Tree) LCT维护一个森林,即把每个节点用splay维护,可以进行许多操作: 查询.修改链上的信息 随意指定原树的根(即换根) 动态连边.删边 合并两棵树.分离一棵树 动 ...

  4. Receiver class com.mchange.v2.c3p0.impl.NewProxyResultSet does not define or inherit an implementation of the resolved method 'abstract boolean isClosed()' of interface java.sql.ResultSet.

    背景: Mayabtis+springboot项目,连接数据库发生异常 报错内容: java.lang.AbstractMethodError: Receiver class com.mchange. ...

  5. Angular封装WangEditor富文本组件

    富文本组件是web程序中很常用的一个组件,特别是要开发一个博客,论坛这类的网站后台. 得益于Angular的强大,封装WangEditor组件非常简单 1.使用yarn或者npm安装wangedito ...

  6. 微信小程序账号注册

    想要开发微信小程序,先注册账号申请APPID. 第一步:百度搜索"微信公众平台" 第二步:立即注册 进入注册页面 区别: 订阅号: 订阅号在文件夹里,订阅号消息 一天只能推送一次, ...

  7. 使用hsdis-amd64.dll打印java的汇编文件

    文件放在D:\DeveSOFTWARE\jdk1.8.0_45\jre\bin目录下 hsdis-amd64.dll 下载路径:https://github.com/atzhangsan/file_l ...

  8. PHP imap 远程命令执行漏洞(CVE-2018-19518)

    影响版本 PHP:5.6.38 系统:Debian/ubuntu 构造数据包 成功执行命令echo '1234567890'>/tmp/test0001

  9. Android 帧动画使用

    帧动画 使用一系列不同的图片,然后像一卷胶卷一样按顺序播放,这是一种传统的动画,也可称为帧动画.也可以比喻为像一卷胶卷一样按顺序播放. 播放起来,有点像在看gif图. 本文介绍使用AnimationD ...

  10. openssl not found 离线安装的openssl问题

    离线安装问题 正常我们在Linux中按照 nginx的openssl依赖都是通过 yum来安装的,但是由于一些特殊的服务器公司不让服务器连接互联网,所以就导致我们必须通过离线方式来进行安装,但是我们离 ...