Python代碼審計要領多種多樣,然則總而言之是依據后人思緒的遷徙融會擴大而造成。現在Python代碼審計思緒,呈現疏散以及多樣的趨向。Python菲薄研發履歷和結合現實碰到的思緒以及技能進行總結,以便于同伙們的進修以及參考。
SQL注入以及ORM注入 這兩者注入類似度較高,以是打算放在一路闡發以及總結。它們所用道理OWASP TOP TEN 中的描寫特別很是合適,“將不受信托的數據作為下令或者查問的一六合彩全車部門發送到剖析器時,會發生諸如SQL注入、NoSQL注入、OS注入以及LDAP注入的注入缺陷。進擊者的歹意數據可以誘使剖析器在沒有恰當受權的環境下履行非預期下令或者走訪數據。”。 1. SQL注入 Python 中常見存在危害SQL語句,在id或者者Name可控的環境下存在寧靜隱患。可控參數可以將咱么指望他履行的代碼按照語法進行拼接,從而履行底本預期以外的代碼。 sql = "select id,name from user_table where id = %s and name = %s" % (id, name) cur.execute(sql) 然而在現實案例中,這類履行SQL語句并不多,比較典型的案例。實例代碼以下: import urllib import MySQLdb import SocketServer from SimpleHTTPServer import SimpleHTTPRequestHandler class MyHandler(SimpleHTTPRequestHandler): def _set_headers(self): self.send_response(200) self.send_header(‘Content-type’, ‘text/html’)&n香港六合彩资料bsp; self.end_headers() def do_GET(self): print("got get request %s" % (self.path)) hql = urllib.splitquery(self.path)[1] uri_c = str(hql) print(‘cmd===%s’ % (uri_c)) sql = "select id from user_table where id =&n麻將onlinebsp;%s" %&nb線上麻將pttsp;uri_c db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset=’utf8′) cursor = db.cursor() cursor.execute(sql) data = cursor.fetchone() self.wfile.write(data) def start_server(): httpd = SocketServer.TCPServer(("127.0.0.1", 8090), MyHandler) print(‘Starting httpd…’) httpd.serve_forever() if __name__ == "__main__": start_server() 這是一個簡略的HTTP服務器,現在在Python2中可以正常運轉。經由過程urllib.splitquery獵取GET哀求的參數,uri_c 內里為哀求參數的值。用值傳遞到SQL語句中拼接,從而發生注入成績。這是比較簡略的一種,正常環境下挪用鏈可能會比較長,長短取決于平臺的設計架構。 2. ORM注入 (1) sqlalchemy ORM注入(CNVD-2019-17301) 思量到的懂得上比較輕易,用模塊進行舉例,并不觸及到框架。ORM注入是SQL注入的一種非凡環境,ORM模塊將SQL語句進行模板化,以是找SQL語句字符串的設施欠好用了。那末應當怎么辦?依據模塊來找尋履行要領,若是模塊存在成績以及未妥帖過濾或者本義、存在可控變量則可能會發生成績。若何往發明以及查找Python ORM模塊,揭示同伙們搜刮技巧的時辰到了,再也不須生常談。上面進入案例: from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker import sqlalchemy print("sqlalchemy_version:",sqlalchemy.__version__) 【免責聲明】本站內容轉載自互聯網,其相關談吐僅代表作者小我私家概念盡非權勢巨子,不代表本站態度。如您發明內容存在版權成績,請提交相關鏈接至郵箱:,咱們將實時予以處置。 |