sql注入攻击与防御第二版读书笔记一
SQL注入是一种将SQL代码茶u日或添加到用户输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。
sql注入不止会影响web应用,还能影响例如“胖客户端”程序。不止能影响服务器端数据库,也能访问客户端数据库以窃取数据。
数据库驱动的Web应用通常包含三层:表示层(浏览器),逻辑层(PHP 等编程语言),存储层(MySQL等数据库)。
表示层向逻辑层发送请求,逻辑层通过查询,更新存储层响应请求。
SQL注入产生过程
- 转义字符处理不当
SQL数据库将单引号解析成代码与数据的分界线 单引号不是唯一的转义字符,mysql中转义字符
\0
一个ASCII 0 (NUL)字符。
\n
一个新行符。
\t
一个定位符。
\r
一个回车符。
\b
一个退格符。
\ '
一个单引号(“ '”)符。
\ "
一个双引号(“ "”)符。
\\
一个反斜线(“\”)符。
\%
一个“%”符。它用于在正文中搜索“%”的文字实例,否则这里“%”将解释为一个通配符。
\_
一个“_”符。它用于在正文中搜索“_”的文字实例,否则这里“_”将解释为一个通配符。
注意,如果你在某些正文环境中使用“\%”或“\%_”,这些将返回字符串“\%”和“\_”而不是“%”和“_”。 - 类型处理不当
load_file
select sth into outfile
例如
select * from table where userid=1 union all select load_file('/etc/passwd')-- -
- 查询语句组装不当
select $_GET['column1'] from tabel; column1为url参数,可被控制。
- 错误处理不当
-
多个提交处理不当 URL乱序避开预期的数据流程 可能只有第一个URL做了输入验证
不安全的数据库配置
sql server sa账户
mysql root账户和anonymous账户