[問題] flask post 302 ?

看板Python作者 (洞八達人.拖哨天王)時間3年前 (2021/01/09 19:29), 3年前編輯推噓6(6032)
留言38則, 5人參與, 3年前最新討論串1/1
code在這 https://tinyurl.com/y68npkms 肥宅大叔最近在自學搞一個留言板 雖然功能測試起來目前看起來好像似乎大概沒問題 不過terminal會出現"POST /msg HTTP/1.1" 302 google說重新導向時會吐這訊息 這會有什麼問題嗎? 另外請教一下,圖片和縮圖存成檔案比較好還是塞進資料庫? 我現在做的是上傳後全塞進sqlite的資料庫 另問... id=123, kind="test" sql = f"select {kind} from table where id = {id}" cur.execute(sql) data=cur.fetchone()[0] 這樣傳回的data是我想要的 可是 sql = "select ? from table where id = ?" cur.execute(sql,(kind,id)) data=cur.fetchone()[0] 為什麼這樣只傳回"test"? 目前用做半套的處理 sql = "select {} from table where id = ? ".format(kind) cur.execute(sql,(id,)) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.234.23.210 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1610191787.A.F68.html

01/10 05:23, 3年前 , 1F
sql的問題,是不是這樣代入變成SELECT "test" FROM ...,
01/10 05:23, 1F

01/10 05:24, 3年前 , 2F
test是被用常數字串的方式帶入了,所以行為會是找到一行符
01/10 05:24, 2F

01/10 05:24, 3年前 , 3F
合條件的就傳回一行"test"
01/10 05:24, 3F

01/10 05:25, 3年前 , 4F
類似我們常會用到 SELECT 1 FROM ... 的這個技巧
01/10 05:25, 4F
可是用select 1 from table...只會吐回一堆1...

01/10 05:37, 3年前 , 5F
你寫redirect不就302
01/10 05:37, 5F

01/10 05:39, 3年前 , 6F
還是你想回應什麼?
01/10 05:39, 6F

01/10 08:29, 3年前 , 7F
如果想要知道server為啥有這樣行為,可以先讀http protoco
01/10 08:29, 7F

01/10 08:29, 3年前 , 8F
l
01/10 08:29, 8F

01/10 08:29, 3年前 , 9F
了解一下通訊流程
01/10 08:29, 9F
有看沒有懂...XD

01/11 00:04, 3年前 , 10F
第二種select會保護sql injection攻擊,請Google,事
01/11 00:04, 10F

01/11 00:04, 3年前 , 11F
實上任何execute都該養成好習慣用法2,即套件內建的p
01/11 00:04, 11F

01/11 00:04, 3年前 , 12F
laceholder去做請求,而不應該自己去把query組出來,
01/11 00:04, 12F

01/11 00:04, 3年前 , 13F
舉例來說,法1裡,kind="*"的話,你所有欄位就全暴露
01/11 00:04, 13F

01/11 00:04, 3年前 , 14F
01/11 00:04, 14F
reddit有人遇到類似的情況 https://tinyurl.com/yypl85pf 變成要寫比較多行重覆的code stackoverflow上找到的資料 https://tinyurl.com/y68p7l3u column和table不能用方法2的方式... 不過這樣會有sql injection的隱憂不是? 改用ORM會比較好嗎?

01/11 14:18, 3年前 , 15F
flask mega tutorial 有orm的教學,也能找到中文版的
01/11 14:18, 15F

01/11 14:18, 3年前 , 16F
來看
01/11 14:18, 16F

01/11 14:36, 3年前 , 17F
嗯你原始嗎碼連結掛了
01/11 14:36, 17F

01/11 14:36, 3年前 , 18F
根據維基敘述 post是對伺服器
01/11 14:36, 18F

01/11 14:36, 3年前 , 19F
提交表單或上傳檔案
01/11 14:36, 19F
※ 編輯: OrzOGC (61.221.45.183 臺灣), 01/11/2021 14:41:34

01/11 14:41, 3年前 , 20F
用簡單的模型來說,你提交
01/11 14:41, 20F

01/11 14:41, 3年前 , 21F
表單給伺服器上某一資源
01/11 14:41, 21F

01/11 14:41, 3年前 , 22F
但伺服器認為那一個物件是位於
01/11 14:41, 22F

01/11 14:41, 3年前 , 23F
伺服器上的別處,而不是你要求的地方
01/11 14:41, 23F

01/11 14:42, 3年前 , 24F
那你原本程式為啥會這樣做,
01/11 14:42, 24F

01/11 14:42, 3年前 , 25F
樓上有人提過了(前面只是大略
01/11 14:42, 25F

01/11 14:42, 3年前 , 26F
解釋)
01/11 14:42, 26F

01/12 11:24, 3年前 , 27F
select 1 from table... 吐回一堆1就是它精華的地方啊
01/12 11:24, 27F

01/12 11:25, 3年前 , 28F
自己Google一下就知道為什麼要用它了
01/12 11:25, 28F

01/12 11:26, 3年前 , 29F
然後你提到col跟table怕有sql injection的隱憂,但你要先
01/12 11:26, 29F

01/12 11:26, 3年前 , 30F
想清楚為什麼你的設計上會需要使用者直接輸入col或table
01/12 11:26, 30F

01/12 11:27, 3年前 , 31F
名稱?這安全性問題是發生在你的設計上。
01/12 11:27, 31F

01/12 11:27, 3年前 , 32F
舉例來說你有國文 英文 數學 物理四科目成績是四個欄位名
01/12 11:27, 32F

01/12 11:28, 3年前 , 33F
,你想要讓使用者查詢四種科目
01/12 11:28, 33F

01/12 11:28, 3年前 , 34F
但你設計上為什麼會讓使用者填入一個任意字串來決定要
01/12 11:28, 34F

01/12 11:29, 3年前 , 35F
SELECT的col名稱?光想就知道問題很大了吧!
01/12 11:29, 35F

01/12 11:30, 3年前 , 36F
合理的做法應該是讓使用者用選擇的方式選1 2 3 4,然後程
01/12 11:30, 36F

01/12 11:31, 3年前 , 37F
式裡面將1 2 3 4轉為col真正名稱才拼貼進query指令,這樣
01/12 11:31, 37F

01/12 11:31, 3年前 , 38F
使用者就沒有機會用這介面對col名稱做注入攻擊
01/12 11:31, 38F
文章代碼(AID): #1V-PEhze (Python)