一、sql注入攻击及防范
1、sql注入的危害
- 非法读取,篡改,删除数据库中的数据
- 通过修改数据库来修改网页上的内容
- 盗取用户的各类敏感信息
- 注入木马等
- 是黑客攻击常用的手段
2、sql注入攻击原理
class LoginUnsafeView(View):
def get(self, request):
return render(request, "login.html", {})
def post(self, request):
user_name = request.POST.get("username", "")
pass_word = request.POST.get("password", "")
import MySQLdb
conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='root', db='mxonline', charset='utf8')
cursor = conn.cursor()
sql_select = "select * from users_userprofile where email='{0}' and password='{1}'".format(user_name, pass_word)
result = cursor.execute(sql_select)
for row in cursor.fetchall():
# 查询到用户
pass
print 'test'
用户在登录的时候用户名如果输入 ' OR 1=1, 密码随便输入,SQL语句就变成了这样:
select * from users_userprofile where email='' OR 1=1' and password='123',email='' or 1=1这条件就直接为True了,不用去执行后面的and语句了,那么是不是直接就将用户的信息拿到了呢,所以这种写法是非常危险的。
那么如何去防护呢?可以尽量不去使用SQL原生语句去获取数据,可以通过django的orm去查询数据,在登录的使用使用django的login函数,这个函数是安全的。
2、xss攻击与防护
(1) xss跨站脚本攻击的危害
- 控制受害者机器向其他网站发起攻击,注入木马
- 盗取各类用户账号
- 非法转账等
(2)xss攻击原理
黑客将一段带有js代码的url发送给用户,用户点击这个url后发送请求到服务器,服务器返回数据给受害者,然后浏览器执行这段js脚本将用户的cookie信息发送给黑客,然后黑客拿着用户的cookie伪装成用户向服务器发送请求,这时黑客就可以进行任何攻击或者其他操作。
(3)xss防护
- 对用户输入的地方和变量都检查长度和对<>;'等字符做一些过滤
- 不要在cookie中泄露用户的隐私数据,如用户名和密码
- 将cookie和系统ip绑定来降低cookie泄露后的危险
- 尽量采用POST方法而非GET提交表单
3、csrf攻击与防护
(1)csrf攻击的危害
- 以用户的名义去发送邮件
- 盗取账号
- 购买商品
- 虚拟货币转账
(2) csrf攻击的原理
用户登录受信任的A服务器,服务器返回cookie,用户之后的每次请求都会带上cookie去访问A服务器,但是用户在同时的时候没有登出或者关闭A服务器的页面,直接去访问危险的B服务器,然后B服务器要求用户去访问A的一个url,这时信息就会泄露。
(3) csrf攻击的防护
在每个form中加上{{ csrf_token }}即可