下面我们通过一段代码了解一下SQL注入的过程:
# users/views.py文件:
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 'hello'
# eduline/urls.py文件:
from users.views import LoginUnsafeView
urlpatterns = [
path('login/', LoginUnsafeView.as_view(), name='login'),
]
这里竟然把sql语句写到这里,所以我们可以在参数中加入sql语句,使之拼接字符串从而为真被系统识别通过,盗取用户信息。但是在Django自带了orm,可以对这个进行验证,从而保证系统的安全。
因此建议大家都采用orm这种形式,不要使用原生的sql语句。
XSS攻击及防护
首先我们来了解一下什么是XSS攻击?
XSS跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
XSS攻击的危害: