Tornado的日常犯傻(2)

2021-09-05 08:43:51 字數 1753 閱讀 3843

搭建簡單的aesecb攻擊試驗時,需要直接獲取query引數,但是傳過去的引數都是自行構建的,如下:

import time

timestamps =

int(time.time())

.to_bytes(length=

4, byteorder=

'little'

)server_id = settings.server_id.encode(settings.charset)

plaintext = timestamps + server_id

ciphertext = aes.encrypt(plaintext)

response = requests.get(settings.server_address, params=

)

可以看到,這裡傳過去的引數是位元組型,且無法直接decode('utf-8')對應的引數,因為timestamps我使用了位元組儲存。如果直接在服務端使用get_argutment('ciphertext')去獲取對應的引數,肯定會直接報錯的,因為tornado的所有獲取引數的方法都會對獲取到的引數執行預設的decode操作,如注釋所說:

這個方法會在所有get_arguments被呼叫,而且它也沒有提供可以自行設定字符集的引數(decode('latin1')其實是可行的)。所以,需要直接得到url裡面的引數,不能使用已經包裝好的方法。

def

get(self,

*args,

**kwargs)

: ciphertext = self.request.query_arguments[

'ciphertext'][

0]

直接從query_arguments中獲取引數

需要注意的是,parse_qs_bytes方法是使用latin1進行編碼的

考慮到latin1的編碼空間:

latin1iso-8859-1的別名,有些環境下寫作latin-1iso-8859-1編碼是單位元組編碼,向下相容ascii,其編碼範圍是0x00-0xff0x00-0x7f之間完全和ascii一致,0x80-0x9f之間是控制字元,0xa0-0xff之間是文字元號。

可以看到,latin1的編碼空間符合我對timestamp的處理,當然,手動引入from tornado.escape import url_unescape然後對self.request.uri進行url_unescape(self.request.uri)也是可以的,這樣可控性更好,只是相對麻煩一點。

沒事別瞎折騰。。做個實驗都快出花了。

日常犯錯 測介面產生的錯誤

用postman測介面 如果改動了程式的xml檔案,務必重啟伺服器。如果發現自己的類裡面有4個引數,但是用postman給出4個引數時卻發生404 的錯誤,請務必檢查自己類裡面的引數名稱跟postman裡面輸入的引數名稱是否保持一致,還有自己的函式裡面的request是否是對應的request pu...

opencv學習的日常積累(2)

6 計算輪廓的周長,刪除輪廓 int arclength contours i ture ture是閉合,false是開的 itr contours.erase itr 7 幾個常用函式的區別 pow double x,double y 返回值為double powf double x,double...

日常總結的知識點(2)

1 關於lerp 的理解,所有的lerp就是插值,怎樣理解呢,lerp方法裡面有三個引數,起點,終點,比例 比例的意思就是佔起點和終點之間的百分比,是乙個 0 1 之間的數。transform.rotation quaternion.lerp transform.rotation,qua,time....