MENU

Common Web Attacks

2021 年 10 月 12 日 • 阅读: 5958 • 安全

本文介绍了 XSS,CSRF,SQL Injection 和 DDOS 攻击的基本原理,由于基本是参考链接摘录,读者可酌情阅读。

Cross Site Scripting (XSS)

跨站脚本攻击,为了区分 Cascading Style Sheets (CSS),把 Cross 缩写为 X。易受此类攻击的站点被用来执行 恶意 JS 代码。防御方法是加强输入 校验,将提交内容 编码 后保存,不随意将外部内容直接渲染到页面。

Example

下面这段 JSP 代码将请求参数中的 eid 直接渲染到 HTML。攻击者可以构造 eidJS 的链接,通过邮件等形式诱导受害者点击,从而让浏览器执行恶意代码。这种形式的攻击称为 Reflected XSS

<% String eid = request.getParameter("eid"); %>
...
Employee ID: <%= eid %>

下面这段 JSP 代码从数据库取 用户名 渲染到 HTML。如果不加校验,攻击者可以将自己的用户名设为 JS 片段,诱导受害者访问他的主页触发恶意代码执行。这种形式的攻击称为 Stored XSS

<%...
 Statement stmt = conn.createStatement();
 ResultSet rs = stmt.executeQuery("select * from emp where id="+eid);
 if (rs != null) {
  rs.next();
  String name = rs.getString("name");
%>

Employee Name: <%= name %>

下面这段 HTML 代码从 URL 中解析语言参数渲染到 DOM。

…

Select your language:

<select><script>

document.write("<OPTION value=1>"+decodeURIComponent(document.location.href.substring(document.location.href.indexOf("default=")+8))+"</OPTION>");

document.write("<OPTION value=2>English</OPTION>");

</script></select>
…

攻击者可以构造下面这样的链接诱导受害者点击,从而执行恶意 JS 代码。由于这种攻击不与服务器交互,因此称为 DOM Based XSS

<!-- 正常链接 -->
http://www.some.site/page.html?default=French

<!-- 恶意链接 -->
http://www.some.site/page.html?default=<script>alert(document.cookie)</script>

Cross Site Request Forgery (CSRF)

跨站请求伪造,利用用户未登出的 Session 执行非法操作。防御方法是为每个请求生成唯一 Token,校验通过再执行操作。

Example

假如以下请求是某银行的转账接口。攻击者可以构造恶意链接更改目标账户和金额,利用钓鱼邮件等形式诱导用户点击,从而实现非法目的。

GET http://bank.com/transfer.do?acct=BOB&amount=100 HTTP/1.1

即使是非 GET 方法,也可以在钓鱼页面通过 JS 发送。

PUT http://bank.com/transfer.do HTTP/1.1

{ "acct":"BOB", "amount":100 }
<!-- 现代浏览器已经不允许未经服务器允许的 CORS 请求 -->
<script>
function put() {
    var x = new XMLHttpRequest();
    x.open("PUT","http://bank.com/transfer.do",true);
    x.setRequestHeader("Content-Type", "application/json");
    x.send(JSON.stringify({"acct":"BOB", "amount":100})); 
}
</script>

<body onload="put()">

Structured Query Language Injection (SQL Injection)

SQL 注入攻击。利用服务端对 SQL 参数的 弱校验,盗取或破坏 数据库 信息。防御方法是加强入参校验。

Example

以下服务端代码如果不对请求参数作校验而直接构造 SQL 执行,则攻击者可以任意拼接执行恶意操作。

String query = "SELECT \* FROM accounts WHERE custID='" + request.getParameter("id") + "'";

例如,攻击者可发送如下请求获取系统所有账户。

http://example.com/app/accountView?id=' or '1'='1

Distributed Denial of Service (DDOS)

分布式拒绝服务。利用庞大僵尸网络对网站发起大量恶意请求,致使服务端资源耗竭,无法为正常用户提供服务。防御关键是 恶意流量 的检测和清洗。

References

TG 大佬群 QQ 大佬群

最后编辑于: 2021 年 10 月 13 日
返回文章列表 文章二维码
本页链接的二维码
打赏二维码
添加新评论

Loading captcha...

已有 2 条评论
  1. 于长野 于长野   Android 10  WebView 4.0

    学到了::quyin:OK::

    1. LOGI LOGI   Windows 10 x64 Edition  Google Chrome 95.0.4638.54

      @于长野#(赞一个)