iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
自我挑戰組

Rails 手工打造自己的部落格 系列 第 14

Rails 手工打造自己的部落格 14 - CRUD 05

  • 分享至 

  • xImage
  •  

昨天那樣子寫,是不是會發現怎麼好像都沒有辦法成功?
因為 Rails 有非常強大的安全機制,你丟進去的東西都要經過核准才可以!

Strong Parameters

這也是 rails 的開發慣例,
中文譯作「強參數」,也可以稱做,「清洗參數」。
為什麼要這麼做呢?
「強參數」是一種安全機制,它可以防止惡意使用者透過操縱參數來執行不安全的操作,
如SQL注入、跨站腳本攻擊等。
可以順便談一下網路攻擊

跨站腳本攻擊 XSS

Cross-site scripting,通常簡稱為:XSS

XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使使用者載入並執行攻擊者惡意製造的網頁程式。
這些惡意網頁程式通常是JavaScript,但實際上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。
攻擊成功後,攻擊者可能得到更高的權限(如執行一些操作)、私密網頁內容、對談和cookie等各種內容。
簡單來說,就是攻擊者可以偷塞一些惡意的程式碼在表單裡面,
讓他在submit的時候,一起把這些東西寫進資料庫裏面,造成網站的損耗。

所以這個清洗參數的動作就很重要!那我們可以照著現在有的參數去設定

  • 通常強參數都會寫成一個方法
  def article_params
    params.require(:article).permit(:title, :content)
  end
  • 然後再把清洗過的參數放進去create的new參數裡面
  def create
    @article = Article.new(article_params)
    if @article.save
      redirect_to root_path 
    else
     render :new
    end
  end

接下來,我們就可以回到網站裡,試著建立看看新的文章,
如果順利地跳轉到首頁,我們就成功的讓他存入資料庫了!

那我們要如何知道有沒有成功呢?
我們可以簡單製作一個flash通知,意思就是跳轉過後他會出現,但你再重整就會消失的文字訊息

  def create
    @article = Article.new(article_params)
    if @article.save
      redirect_to root_path, notice: '成功!!' 
    else
      render :new, notice: '失敗!!'
    end
  end

那我們要讓這段文字渲染在畫面上,就要去view裡面呼叫他
這個可以放在view的layout裡面

  <body class="m-10">
    <%= flash[:notice] %>
    <%= yield %>
  </body>

yield 就是我們每一個頁面都會被呼叫進來,然後由這裡來呈現,
簡單來說這裡就是view的最上層,所以我把notice放在這裡,
之後如果還有其他地方需要用到它,都可以直接從這裡調用!就不需要在個別單頁裡面去多寫。


上一篇
Rails 手工打造自己的部落格 13 - CRUD 04
下一篇
Rails 手工打造自己的部落格 15 -Rails console
系列文
Rails 手工打造自己的部落格 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言