資安宣導 — 用 secure_filename 強化檔案上傳的安全
現代很多應用都需要實作檔案上傳的功能,例如上傳使用者圖像、上傳 CSV 表格等等,不過檔案上傳也是很容易造成資安漏洞的一項功能,一旦寫得不好,就會給惡意人士製造機會入侵系統,甚至成為散佈惡意軟體的中繼站。
本文將說明 1 個檔案上傳功能的資安問題以及如何進行防禦。
Posted on Jan 18, 2024 in Python 程式設計 - 中階 , Python 資訊安全 by Amo Chen ‐ 2 min read
現代很多應用都需要實作檔案上傳的功能,例如上傳使用者圖像、上傳 CSV 表格等等,不過檔案上傳也是很容易造成資安漏洞的一項功能,一旦寫得不好,就會給惡意人士製造機會入侵系統,甚至成為散佈惡意軟體的中繼站。
本文將說明 1 個檔案上傳功能的資安問題以及如何進行防禦。
Posted on Jan 18, 2024 in Python 程式設計 - 中階 , Python 資訊安全 by Amo Chen ‐ 2 min read
對於任何來自未受信任來源的資料,我們都必須假設它可能含有惡意的內容。
就連 YAML 檔也是一樣的!
Posted on Jan 15, 2024 in Python 程式設計 - 中階 , Python 資訊安全 by Amo Chen ‐ 1 min read
Python 3.12 typing 模組推出 1 個新的 @override
decorator 。
本文將介紹其用途與教學。
Posted on Oct 17, 2023 in Python 程式設計 - 中階 by Amo Chen ‐ 1 min read
__slots__
是 Python 類別必須認識的屬性,這個屬性為我們帶來節省記憶體資源以及增加存取(access)類別屬性(attribute)效率的好處,但相對地,它也犧牲原本方便擴充類別屬性的易用性。
總的來說,它是寫出高效率 Python 程式碼的一環,平常用不到它沒有關係,但如果要榨出更多記憶體資源以及效能的話, __slots__
是一定能派上用場。
本文將透過各種範例認識 __slots__
並學會如何運用它。
Posted on Oct 16, 2023 in Python 程式設計 - 中階 by Amo Chen ‐ 4 min read
Python 的物件導向程式設計(OOP)有 2 個一定要懂的東西:
如果不懂得這 2 個東西,就無法徹底解放類別(class)的力量,甚至可能導致寫出不夠彈性而且冗長的程式碼。
super() + MRO
= 超級瑪利歐?(誤
本文將從 super()
函式開始講解,說明 Python 的 MRO(Method Resolution Order) ,並介紹 MRO 的特性在實務上的應用。
如果你無法正確回答以下範例結果的執行結果,那麽推薦你看完本文:
class Parent(object):
NAME = 'Parent'
def __str__(self):
return self.NAME
class Child(Parent):
NAME = 'Child'
def __str__(self):
return super().__str__()
c = Child()
print(c)
正確答案為: Child
Posted on Oct 6, 2023 in Python 程式設計 - 中階 by Amo Chen ‐ 6 min read
Python 3.8 之後 typing 模組 新增 1 個 typing.Protocol 的 class 可以使用,這個 class 很適合用來給一些有實作特定方法的 class 們做 type annotation 。
舉個常見的交通工具作為例子,假設我們有 1 個函數接受任何有實作 move()
方法的 instance:
def move(x):
x.move()
這時候可以用 typing.Protocol 將參數 x
加上 1 個 type hint, 讓彼此知道此處不管型別,只管是否有實作 move()
方法:
from typing import Protocol
class Movable(Protocol):
def move(self):
...
def move(x: Movable):
x.move()
加上 typing.Protocol 是否看起來清晰很多?
Posted on Sep 25, 2023 in Python 程式設計 - 中階 by Amo Chen ‐ 4 min read
這陣子做記憶體用量相關的研究時,就在想怎麼視覺化(visualize) Python 執行時隨時間變化的記憶體用量,當然,步驟越簡單越好。
查了才知道,知名的 memory_profiler 已經把這件事情搞定。
一起來看怎麼畫 Python 記憶體用量圖吧!
Posted on Sep 11, 2023 in Python 模組/套件推薦 , Python 程式設計 - 中階 by Amo Chen ‐ 2 min read
你有沒有遇過某些資料或類別 pickle 之後,之後要 unpickle 時出現 AttributeError
的情況,例如:
AttributeError: Can't get attribute 'A' on <module '__main__' (built-in)>
這是由於 pickle 使用的是 serialization by reference 技術,所以某些資料或類別它不會放到序列化的結果,因此這種問題可以試看看用 cloudpickle 解決。
一起看看 cloudpickle 與 pickle 模組之間的差異,以及它如何能解決你的問題吧!
Posted on Sep 3, 2023 in Python 模組/套件推薦 , Python 程式設計 - 中階 by Amo Chen ‐ 2 min read