django之orm的高級操做以及xcc安全攻擊

查詢用法大全:

1. 比較運算符
# id > 3
res = models.UserInfo.objects.filter(id__gt=3)
# id >= 3
res = models.UserInfo.objects.filter(id__gte=3)
# id < 3
res = models.UserInfo.objects.filter(id__lt=3)
# id <= 3
res = models.UserInfo.objects.filter(id__lte=3)
# id != 3
res = models.UserInfo.objects.exclude(id=3)
# id = 2 and name = "zekai"
res = models.UserInfo.objects.filter(id=2,name="zekai")


# or
from django.db.models import Q
res = models.UserInfo.objects.filter(Q(id__gt=3|Q(name='zekai')))
2. 身份運算符 in ,not in
in
res = models.UserInfo.objects.filter(id__in=[2,3,4])

not in
res = models.UserInfo.objects.exclude(id__in=[2,3,4])
3. between...and
res = models.UserInfo.objects.filter(id__range=[1,2,3,4])
4. like
# 以'ze'開頭
res = models.UserInfo.objects.filter(name__startswith='ze')

# g: 全局 global  i:忽略大小寫 ignore    以ze開頭,且忽略大小寫
res = models.UserInfo.objects.filter(name__istartswith='ze')


# 以'ze'結尾
res = models.UserInfo.objects.filter(name__endswith='ze')

res = models.UserInfo.objects.filter(name__iendswith='ze')

# 包含ze的
res = models.UserInfo.objects.filter(name__contains='ze')
res = models.UserInfo.objects.filter(name__icontains='ze')
5. count
res = models.UserInfo.objects.filter(id__gt=3).count()
6. order by。
# 數據以id升序
res = models.UserInfo.objects.all().order_by('id')


# 數據以id降序
res = models.UserInfo.objects.all().order_by('-id')

# 數據以id降序,id相同的話 以age升序
res = models.UserInfo.objects.all().order_by('-id','age')
7. group by
# 導入模塊
from django.db.models import Avg, Sum, Max, Min, Count

# 
res = models.UserInfo.objects.values("name").annotate(s=Sum('age'))


res = models.UserInfo.objects.values("name").annotate(s=Sum('age')).filter(s__gt=50)
8. limit
# 從第10行開始取,取到20行
all()就是一個列表。所以[10:20]就是一個切片
res = models.UserInfo.objects.all()[10:20]
9. last
# 取最後一行數據
res = models.UserInfo.objects.last()
10. only
# 僅取name這列數據,(id默認會被取進去)
res = models.UserInfo.objects.only('name')
11. defer
# 排除name這列數據,其餘列的數據都會取進去,(id默認會被取進去)
res = models.UserInfo.objects.defer('name')
12. F(批量操做列的數據)
from django.db.models import F
# 對UserInfo表中age列的全部數據 加 1
res = models.UserInfo.objects.update(age=F('age')+1)

13. 原生的sql

1. 使用extra方法html

'''
解釋:結果集修改器,一種提供額外查詢參數的機制
說明:依賴model模型
'''
用在where後:
    Book.objects.filter(publisher_id="1").extra(where=["title='python學習1'"])    

用在select後  
    Book.objects.filter(publisher_id="1").extra(select={"count":"select count(*) from hello_book"})

2. 使用raw方法python

'''
解釋:執行原始sql並返回模型
說明:依賴model多用於查詢
'''
# 用法:
book = Book.objects.raw("select * from hello_book")
for item in book:
    print(item.title)

3. 執行自定義SQLweb

'''
解釋:利用遊標執行
導入:from django.db import connection
說明:不依賴model
'''

# 用法:

from django.db import connection
cursor = connection.cursor()
#插入
cursor.execute("insert into hello_author(name) values('xiaol')")
#更新
cursor.execute("update hello_author set name='xiaol' where id=1")
#刪除
cursor.execute("delete from hello_author where name='xiaol'")
#查詢
cursor.execute("select * from hello_author")
#返回一行
raw = cursor.fetchone()
print(raw)
#返回全部
cursor.fetchall()
14. distinct
 

安全攻擊

1、xss

XSS是一種常常出如今web應用中的計算機安全漏洞,它容許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。也屬一種注入攻擊,注入本質上就是把輸入的數據變成可執行的程序語句好比這些代碼包括HTML代碼和客戶端腳本。sql

2、危害

  • 盜取各種用戶賬號,如機器登陸賬號、用戶網銀賬號、各種管理員賬號
  • 控制企業數據,包括讀取、篡改、添加、刪除企業敏感數據的能力
  • 盜竊企業重要的具備商業價值的資料
  • 非法轉帳等

3、原理:

一、反射型xss攻擊
通常的瀏覽器與服務器交互都是,客戶端向服務器發送一條請求,相似http://www.bigshop.com/product/list/?q=手機,也就是說客戶向目標站點發送了一條查詢全部手機的請求,而後服務器向客戶端返回相關數據,這是正常的。而且手機這一關鍵詞也會被從新返回給瀏覽器端的用戶,這就使得xss攻擊有隙可乘。黑客將http://ww.bigshop.com/product/list/?q=這條包含惡意腳本的連接經過某種方式發送給用戶,那麼用戶一旦點擊這條連接,就會向目標站點發送查詢的請求,這固然是查詢不到任何結果,可是這段JavaScript的腳本就會從後臺轉了一圈又回到瀏覽器,這樣瀏覽器就會執行這段代碼,也就是是獲取用戶的cookie值。一旦黑客拿到你的cookie值,基本上就至關於能夠模擬你的身份。
能夠看到,攻擊者巧妙地經過反射型XSS的攻擊方式,達到了在受害者的瀏覽器上執行腳本的目的。因爲代碼注入的是一個動態產生的頁面而不是永久的頁面,所以這種攻擊方式只在點擊連接的時候才產生做用,這也是它被稱爲非持久型XSS的緣由。
二、存儲型xss攻擊
存儲型xss攻擊與反射型xss攻擊的區別在於,xss攻擊已經存儲在服務器的數據庫上,能夠長期的返回給瀏覽器端。例如當客戶A在博客園的博客或者評論區寫入一段js惡意腳本,這段腳本就會永久存儲到博客園的數據庫,一旦當有其餘用戶請求查看這條博客或者評論,博客園就會將相應的數據返回給用戶,固然這段js惡意腳本也會被返回給用戶的瀏覽器並執行。

4、防禦

  • 字符過濾:對用戶的請求不管是url仍是表單提交的內容都進行長度檢查和對特殊字符進行過濾
  • cookie方面:避免在cookie中放入重要敏感信息
  • 表單提交:儘可能使用post的方式提交表單而不是get方式

不只服務器拿到用戶的請求進行過濾,在服務器將數據返回給瀏覽器後,瀏覽器也會再一次進行防禦。數據庫

5、在django中咱們應該如何防禦?

django已經爲咱們作好了防禦,所以咱們不須要對其進行處理。

另外若是咱們解除django的防禦措施,只須要在展現用戶信息時,使用{{ 展現信息 | safe }}

步驟1:django

步驟2:瀏覽器

步驟3:安全

步驟4:服務器

步驟五:cookie

步驟6:

防止XSS攻擊

Xss攻擊就是有人在頁面的輸入框輸入一些能夠執行的html代碼,例如利用一些模塊語言讓html文件無限循環彈出窗口等.

Django自帶了預防xss攻擊的代碼,若是想讓它不防止就加「|safe」

6、其餘攻擊

csrf攻擊
sql攻擊

Django實現修改列明的方法有兩種:

​ 方法1: annotate

​ 方法2: extra

相關文章
相關標籤/搜索