iT邦幫忙

1

mysql 插入文章,要怎麼做較安全又不會讓部分內容被轉掉

web api中是這樣寫

let myparams = [Number(p1), p2, Number(p3), p4, p5];
let querystr = "insert into message(AID, Author, Author_CID, Author_IP, Txt) values(?, ?, ?, ?, ?)";

用這種?帶入參數的方式
他會自動套用escape()來做安全的字串轉換
避免sql injection
但是例如我在Txt那邊打 '+1一起玩'
+就會消失,變成 ' 1一起玩'

確認過不是資料庫的問題
在插進資料庫之前的query就已經消失了

請問通常插文章進資料庫都是用什麼做法?

player iT邦大師 1 級 ‧ 2020-08-10 01:15:37 檢舉
要看程式語言
你要看是不是在接request時就被轉掉了?
如果是的話
先url編碼後再送出
了解~我測測看
最後我的解法: str.replace(/\+/g, '%2B')
原因url encode會變成空白('%20'),而非'%2B'

2 個回答

1
舜~
iT邦高手 1 級 ‧ 2020-08-09 23:43:11

可以先對文章進行特殊字元排除(視情況)後~

對文章進行編碼再儲存~

使用時解碼再顯示~

3Q~我試試

6
raytracy
iT邦大神 1 級 ‧ 2020-08-10 01:16:19

我不知道你們把非結構性資料 (文章) 塞進 MySQL 的目的是甚麼? 通常 RDBMS 我們會盡量只存結構性資料.....

例如, 我有個客戶, 八年前開發的時候, 原本都把文章塞到 MS-SQL 裡面, 最近卻忙著把當初塞進去的文章, 通通撈出來, 改存到 MongoDB 去....因為這些非結構性資料, 把它們的 RDBMS 效能拖垮了, 只要流量衝高就是當機 (CPU 已經加到 40 core, RAM 192GB, 全部 DB 吃進 RAM 了, Disk 幾乎沒流量, 仍然掛掉)...

由於不知道你們以後打算如何使用這些文章? 所以也不敢很偏頗的用上面的例子來類比你們的狀況, 最終還是要先知道目的, 才知道這樣做好或不好...決定了要不要這樣做之後, 再來討論你的問題才有意義, 否則這個問題說不定可以完全忽略....

ckp6250 iT邦研究生 3 級 ‧ 2020-08-10 05:01:23 檢舉

非常贊同這個看法,
『先問目的,再擇手段』

com iT邦新手 5 級 ‧ 2020-08-10 14:43:12 檢舉

好奇瞬時流量是多少,把40核心操掛

用來存短短的留言用的
顯示於網頁上

我要發表回答

立即登入回答