type
status
date
slug
summary
tags
category
icon
password
Property
Feb 23, 2023 08:46 AM
SQL注入
SQL 注入攻击就是攻击者在提交的请求参数里面,包含有恶意的 SQL 脚本。如下:
如果在 Web 页面中有个输入框,要求用户输入姓名,普通用户输入一个普通的姓名 Frank,那么最后提交的 HTTP 请求如下:
服务器在处理计算后,向数据库提交的 SQL 查询命令如下:
但是恶意攻击者可能会提交这样的 HTTP 请求:
即输入的 uername 是:
这样,服务器在处理后,最后生成的 SQL 是这样的:
事实上,这是两条 SQL,一条 select 查询 SQL,一条 drop table 删除表 SQL。数据库在执行完查询后,就将 users 表删除了,系统崩溃了。
SQL 注入最有效的防攻击手段是 SQL 预编译。Java 开发的话最好使用 PrepareStatement 提交 SQL,而 MyBatis 等 ORM 框架主要的 SQL 提交方式就是用 PrepareStatement。
XSS攻击
XSS 攻击即跨站点脚本攻击,攻击者构造恶意的浏览器脚本文件,使其在其他用户的浏览器上运行,进而进行攻击。
攻击者发送一个含有恶意脚本的请求给被攻击的服务器,比如通过发布微博的方式向微博的服务器发送恶意请求,被攻击的服务器将恶意脚本存储到本地的数据库中,其他的正常用户通过被攻击的服务器浏览信息的时候,服务器会读取数据库中含有恶意脚本的数据,并向其展现给正常的用户,在正常用户的浏览器上执行,从而达到攻击的目的。
XSS 攻击防御的主要手段是消毒,检查用户提交的请求中是否含有可执行的脚本,因为大部分的攻击请求都包含 JS 等脚本语法,所以可以通过 HTML 转义的方式,对比较有危险的脚本语法关键字进行转义。比如把“>”转义为“>”,HTML 显示的时候还是正常的“>”,但是这样的脚本无法在浏览器上执行,也就无法达到攻击的目的。
由于 HTTP 攻击必须以 HTTP 请求的方式提交到服务器,因此可以在服务器的入口统一进行拦截,对含有危险信息的请求,比如 drop table,JS 脚本等,进行消毒转义,或者直接拒绝请求。即设置一个 Web 应用防火墙,将危险请求隔离。
针对 Web 应用防火墙,我们可以自己开发一个统一的请求过滤器进行拦截,也可以使用 ModSecurity(http://www.modsecurity.org/)这样的开源 WAF(Web Application Firewall)。