1.SQL注入
攻击方式
大多数人拥有字母数字式密码,或者有安全意识的人,拥有附带其他键盘符号的字母数字式密码。由于 这种想法,开发人员可能允许输入任何字符作为密码。这通常是没问题的,除非他们忘记清洁或检查输入数据。这种情况比应该的要发生的频繁得多。使用 SQL 数据库的密码系统(在许多网站上非常普遍的场景)可能运行这样的查询:
SELECT * FROM users WHERE 'username' = '$USER' AND 'password'='$PASS';
$USER 和 $PASS 会用用户提供的用户名和密码来代替。那么如果用户输入‘bob’和‘1234’,那么结果的查询是:
SELECT * FROM users WHERE 'username' = 'bob' AND 'password' = '1234';
而来自数据库的返回值会是所有用 bob 作为用户名且用 1234 作为密码的数据元组。如果黑客输入 admin 和 <<’hi’ 或 1=1>>–,那么查询是:
SELECT * FROM users WHERE 'username' = 'admin' and `password` = 'hi' OR 1=1--'
注意用户输入的引号如何与原始查询中的第三个引号匹配。数据库现在会返回用户名为 admin 的所有元组,并且会取消对密码的检查,因为 ‘password’ = ‘hi’ OR 1=1 命令数据库寻找密码是 hi 的元组或 1=1 的元组,而由于 1 总是 1,所以每行都是候选。– 是 SQL 注释标志,取消查询中原始的其他引号,并且还将取消任何额外的检查,因此如果有额外的凭证(也就是,keyfob 或 captcha)也会被忽略。现在黑客可以以管理员的身份进入系统并且不用不得不给出合法的密码。通过利用越来越复杂的查询,黑客可以变更、添加,或查询数据。对于数据库,这令黑客具有同应用程序相同的特权。
解决方案
a.前端页面需要校验用户的输入数据(限制用户输入的类型、范围、格式、长度),不能只靠后端去校验用户数据。一来可以提高后端处理的效率,二来可以提高后端数据的安全。
b.后端不要动态sql语句,使用存储过程查询语句。限制用户访问数据库权限。后端接受前端的数据时要过滤一些特殊字符(如:“--”等字符)
c.后端如果出现异常的话,要使用自定义错误页,防止用户通过服务器默认的错误页面找到服务器漏洞。
安全查询(参数化查询):
安全查询(存储过程) 不安全查询
2.XSS攻击
引用: XSS攻击及防御
3.CSRF攻击
4.Dos攻击
SYN Flood攻击即利用tcp协议原理,伪造受害者的ip地址,一直保持与服务器的连接,导致受害者连接服务器的时候拒绝服务。
解决方案:
5.Cookies攻击
现在多数浏览器都支持在cookie上打上HttpOnly的标记,凡有这个标志的cookie就无法通过Java Script来取得,如果能在关键cookie上打上这个标记,就会大大增强cookie的安全性
6.重定向攻击
7.文件上传攻击
b.文件后缀攻击.上传的文件的后缀可能是exe可执行程序,js脚本等文件,这些程序可能被执行于受害者的客户端,甚至可能执行于服务器上.因此我们必须过滤文件名后缀,排除那些不被许可的文件名后缀.
c..文件内容攻击.IE6有一个很严重的问题 , 它不信任服务器所发送的content type,而是自动根据文件内容来识别文件的类型,并根据所识别的类型来显示或执行文件.如果上传一个gif文件,在文件末尾放一段js攻击脚本,就有可能被执行.这种攻击,它的文件名和content type看起来都是合法的gif图片,然而其内容却包含脚本,这样的攻击无法用文件名过滤来排除,而是必须扫描其文件内容,才能识别。