[问题] 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