[問題] flask post 302 ? & 新手雜問

作者: OrzOGC (洞八達人.拖哨天王)   2021-01-09 19:29:44
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,))
作者: ddavid (謊言接線生)   2021-01-10 05:23:00
sql的問題,是不是這樣代入變成SELECT "test" FROM ...,test是被用常數字串的方式帶入了,所以行為會是找到一行符合條件的就傳回一行"test"類似我們常會用到 SELECT 1 FROM ... 的這個技巧
作者: TakiDog (多奇狗)   2021-01-10 05:37:00
你寫redirect不就302還是你想回應什麼?
作者: manmay (書誠)   2021-01-10 08:29:00
如果想要知道server為啥有這樣行為,可以先讀http protocol了解一下通訊流程
作者: mychiux413 (小邱)   2021-01-11 00:04:00
第二種select會保護sql injection攻擊,請Google,事實上任何execute都該養成好習慣用法2,即套件內建的placeholder去做請求,而不應該自己去把query組出來,舉例來說,法1裡,kind="*"的話,你所有欄位就全暴露了
作者: single4565 (leekdumpling韭菜水餃)   2021-01-11 14:18:00
flask mega tutorial 有orm的教學,也能找到中文版的來看
作者: manmay (書誠)   2021-01-11 14:36:00
嗯你原始嗎碼連結掛了根據維基敘述 post是對伺服器提交表單或上傳檔案用簡單的模型來說,你提交表單給伺服器上某一資源但伺服器認為那一個物件是位於伺服器上的別處,而不是你要求的地方那你原本程式為啥會這樣做,樓上有人提過了(前面只是大略解釋)
作者: ddavid (謊言接線生)   2021-01-12 11:24:00
select 1 from table... 吐回一堆1就是它精華的地方啊自己Google一下就知道為什麼要用它了然後你提到col跟table怕有sql injection的隱憂,但你要先想清楚為什麼你的設計上會需要使用者直接輸入col或table名稱?這安全性問題是發生在你的設計上。舉例來說你有國文 英文 數學 物理四科目成績是四個欄位名,你想要讓使用者查詢四種科目但你設計上為什麼會讓使用者填入一個任意字串來決定要SELECT的col名稱?光想就知道問題很大了吧!合理的做法應該是讓使用者用選擇的方式選1 2 3 4,然後程式裡面將1 2 3 4轉為col真正名稱才拼貼進query指令,這樣使用者就沒有機會用這介面對col名稱做注入攻擊

Links booklink

Contact Us: admin [ a t ] ucptt.com