diff --git a/zh/09.3.md b/zh/09.3.md index 168736a1..d778a70c 100644 --- a/zh/09.3.md +++ b/zh/09.3.md @@ -38,11 +38,13 @@ Web应用未对用户提交请求的数据做充分的检查过滤,允许用 - 使用HTTP头指定类型 +```Go + `w.Header().Set("Content-Type","text/javascript")` 这样就可以让浏览器解析javascript代码,而不会是html输出。 - +``` ## 总结 XSS漏洞是相当有危害的,在开发Web应用的时候,一定要记住过滤数据,特别是在输出到客户端之前,这是现在行之有效的防止XSS的手段。 diff --git a/zh/09.4.md b/zh/09.4.md index 141323ed..d576a168 100644 --- a/zh/09.4.md +++ b/zh/09.4.md @@ -9,6 +9,7 @@ SQL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常 下面将通过一些真实的例子来详细讲解SQL注入的方式。 考虑以下简单的登录表单: +```html
+``` 我们的处理里面的SQL可能是这样的: +```Go username:=r.Form.Get("username") password:=r.Form.Get("password") sql:="SELECT * FROM user WHERE username='"+username+"' AND password='"+password+"'" +``` 如果用户的输入的用户名如下,密码任意 +```Go myuser' or 'foo' = 'foo' -- +``` 那么我们的SQL变成了如下所示: +```Go SELECT * FROM user WHERE username='myuser' or 'foo'=='foo' --'' AND password='xxx' - +``` 在SQL里面`--`是注释标记,所以查询语句会在此中断。这就让攻击者在不知道任何合法用户名和密码的情况下成功登录了。 对于MSSQL还有更加危险的一种SQL注入,就是控制系统,下面这个可怕的例子将演示如何在某些版本的MSSQL数据库上执行系统命令。 +```Go sql:="SELECT * FROM products WHERE name LIKE '%"+prod+"%'" Db.Exec(sql) - +``` 如果攻击提交`a%' exec master..xp_cmdshell 'net user test testpass /ADD' --`作为变量 prod的值,那么sql将会变成 +```Go sql:="SELECT * FROM products WHERE name LIKE '%a%' exec master..xp_cmdshell 'net user test testpass /ADD'--%'" - +``` MSSQL服务器会执行这条SQL语句,包括它后面那个用于向系统添加新用户的命令。如果这个程序是以sa运行而 MSSQLSERVER服务又有足够的权限的话,攻击者就可以获得一个系统帐号来访问主机了。 >虽然以上的例子是针对某一特定的数据库系统的,但是这并不代表不能对其它数据库系统实施类似的攻击。针对这种安全漏洞,只要使用不同方法,各种数据库都有可能遭殃。