推 ddavid: sql的問題,是不是這樣代入變成SELECT "test" FROM ..., 01/10 05:23
→ ddavid: test是被用常數字串的方式帶入了,所以行為會是找到一行符 01/10 05:24
→ ddavid: 合條件的就傳回一行"test" 01/10 05:24
→ ddavid: 類似我們常會用到 SELECT 1 FROM ... 的這個技巧 01/10 05:25
可是用select 1 from table...只會吐回一堆1...
→ TakiDog: 你寫redirect不就302 01/10 05:37
→ TakiDog: 還是你想回應什麼? 01/10 05:39
推 manmay: 如果想要知道server為啥有這樣行為,可以先讀http protoco 01/10 08:29
→ manmay: l 01/10 08:29
→ manmay: 了解一下通訊流程 01/10 08:29
有看沒有懂...XD
推 mychiux413: 第二種select會保護sql injection攻擊,請Google,事 01/11 00:04
→ mychiux413: 實上任何execute都該養成好習慣用法2,即套件內建的p 01/11 00:04
→ mychiux413: laceholder去做請求,而不應該自己去把query組出來, 01/11 00:04
→ mychiux413: 舉例來說,法1裡,kind="*"的話,你所有欄位就全暴露 01/11 00:04
→ mychiux413: 了 01/11 00:04
reddit有人遇到類似的情況
https://tinyurl.com/yypl85pf
變成要寫比較多行重覆的code
stackoverflow上找到的資料
https://tinyurl.com/y68p7l3u
column和table不能用方法2的方式...
不過這樣會有sql injection的隱憂不是?
改用ORM會比較好嗎?
推 single4565: flask mega tutorial 有orm的教學,也能找到中文版的 01/11 14:18
→ single4565: 來看 01/11 14:18
推 manmay: 嗯你原始嗎碼連結掛了 01/11 14:36
→ manmay: 根據維基敘述 post是對伺服器 01/11 14:36
→ manmay: 提交表單或上傳檔案 01/11 14:36
※ 編輯: OrzOGC (61.221.45.183 臺灣), 01/11/2021 14:41:34
→ manmay: 用簡單的模型來說,你提交 01/11 14:41
→ manmay: 表單給伺服器上某一資源 01/11 14:41
→ manmay: 但伺服器認為那一個物件是位於 01/11 14:41
→ manmay: 伺服器上的別處,而不是你要求的地方 01/11 14:41
→ manmay: 那你原本程式為啥會這樣做, 01/11 14:42
→ manmay: 樓上有人提過了(前面只是大略 01/11 14:42
→ manmay: 解釋) 01/11 14:42
推 ddavid: select 1 from table... 吐回一堆1就是它精華的地方啊 01/12 11:24
→ ddavid: 自己Google一下就知道為什麼要用它了 01/12 11:25
→ ddavid: 然後你提到col跟table怕有sql injection的隱憂,但你要先 01/12 11:26
→ ddavid: 想清楚為什麼你的設計上會需要使用者直接輸入col或table 01/12 11:26
→ ddavid: 名稱?這安全性問題是發生在你的設計上。 01/12 11:27
→ ddavid: 舉例來說你有國文 英文 數學 物理四科目成績是四個欄位名 01/12 11:27
→ ddavid: ,你想要讓使用者查詢四種科目 01/12 11:28
→ ddavid: 但你設計上為什麼會讓使用者填入一個任意字串來決定要 01/12 11:28
→ ddavid: SELECT的col名稱?光想就知道問題很大了吧! 01/12 11:29
→ ddavid: 合理的做法應該是讓使用者用選擇的方式選1 2 3 4,然後程 01/12 11:30
→ ddavid: 式裡面將1 2 3 4轉為col真正名稱才拼貼進query指令,這樣 01/12 11:31
→ ddavid: 使用者就沒有機會用這介面對col名稱做注入攻擊 01/12 11:31