建議:route remove .format


#1

大概就是 rails route 都支援 .format 的用法,所以你可以在網址後面加上類似 .json / .xml 之類的東西來做 render 的包裝(其實就是 view 的不同表現而已)

但很多網站開到後面根本都只有 static page,增加 .format 的用法根本就脫褲子放屁唄|||,但這用法卻又是 default 開啟的,而你可以在 route.rb 內把你之前所有的 route 都外包一層

scope format: false do
   #source
end

即可,看 rake routes 應該就沒有 .format 的支援才是

anyway 建議上線前檢查過所有的 route 且個 route 不應該有"第二種解釋",除非你知道你在做啥唄,以上

PS : 你可以找很多 rails 網站做"測試"? XD 類似在網址後面加上 .json,就會知道這篇的意思唄,這不一定是漏洞( 事實上已經有過這類的漏洞了||| 但現在應該被解光了 ),但 … 很有趣?然而你不應該讓他這樣有趣下去,如果你是 webmaster 的話 |||


#2

其實如果你沒有對應的 view template 或是沒有刻意在 controller 裡面 render 對應的 format
你就算是 default route 也不會有東西

可是 scaffold 預設會幫你建,我覺得這比較是開發的時候要注意的事情,而不是從 route 這邊改XD"


#3

沒, route 是萬用解,因為你就算沒用該網址也是能被 access & success,難保哪天不會噴奇怪的鬼,so~


#4

會噴 404 啦,除非你在 development mode 上面飛


#5

沒,我在嚴格定義商業邏輯這件事情就是,你可以隨便沒差,但我的產品必須嚴格定義才行,當你知道 WAF / 流量清洗 / 還有一票過濾的價格之後,你的一行 code 價值還有『可能會引發的危險性』與損失相比,我想從頭到尾的嚴格定義會是一件好事就是

BTW 類似他站的 https://www.maicoin.com/zh-TW/contact.json

我知道這什麼都不是,也不能代表任何東西,但在一些人眼中看起來卻可能是無比的可笑 … 很類似你嘲笑另外一個語言無傷大雅的 bug => 特性唄


#6

他什麼都沒有噴一定是他用了 scaffold 之後沒有把自動產生的東西清理乾淨WWWWWW

如果是自己建的 controller/view 就不會遇到這種問題


#7

你的推定和我的完全不一樣,我的推定是 500 然後不給 error page 來防止入侵,所以給空白畫面 … 事實上用一些奇怪的 template engine 也會發生這個狀況,所以 route 關了啥事都沒有,也不會被人亂玩不是更好點?

and 這種例子我還可以舉一票給你就是 … Rails 開發的很多都會中唄|||


#8

你那個當然是一個解法,可是我覺得比較像是大家對工具不熟悉才會有這樣的結果

Rails 如果找不到 view 或 format 會噴 404 而不是 500
雖然會有錯誤畫面,可是他是 404 沒有問題(development mode)

當然也有可能是他 view 寫壞惹或是 render 爆惹才會是 500 那這就是回歸到我一開始說的「大家對工具不熟悉」

但是我覺得解決問題的根本還是要大家熟悉自己的工具啦~

我沒有說你的方法不對,可是用的人不知道問題的原因以後在別的場景還是會犯錯~


#9

『Rails 如果找不到 view 或 format 會噴 404 而不是 500』沒,而是任何結果都有可能,尤其是一票蠢蛋新手教學時,scaffold 就直接把 obj 丟出去了,我不想繼續蓋樓下去,我只想做出一個提醒,或是提供一個最簡單最容易的解法,我不喜歡在這聊天,因為這邊從來都不是聊天用途的,或許有一天你會想通為啥前段過濾很重要唄,否則當初 Rails 就不用把 route 另外切出來做了,回想那有趣 Rails 1.2.6 時代

你不能把所有人都想成和你一樣的等級,但你應該有辦法做出一個最容易得明白的提醒,而在這狀況下,你該怎樣做?

所以我做出了這個選擇,給出了這個建議就是