私がそのようなフォームを持っているとしましょう:
// JADE
form(action="", method="POST")
select(name="currency")
option(value="EURUSD") EURUSD
option(value="GBPUSD") GBPUSD
option(value="USDCHF") USDCHF
input(type="submit")
# CoffeeScript
sanitizer = require "any sanitizer" # to replace <,>,',", etc.
app.post "/add_currency", (req,res)->
# I use Sequelize for storing data in MySQL
Currency.create(
name: santizer ( req.body.currency )
).success( (created_currency)->
)
オブジェクトを取得します。
{
name: "EURUSD"
id: 1
...
}
しかし、ブラウザーにフォームをロードし、Web インスペクター (Chrome: Developer Tools) で を検査し、最初select(name="currency")
のoption
オプションの値を「EURUSD」から「SOMETHING WIRED」に変更すると、フォームはパスし、オブジェクトが得られます。 :
{
name: "SOMETHING WIRED"
id: 1
...
}
...事実を仮定すると、サニタイザーで入力を技術的にフィルタリングしました! したがって、質問は次のとおりです。
1. 入力の事前定義された値が変更されないようにするにはどうすればよいですか?
2. 入力の名前を変更できないようにするには?
応答からの選択の値がクライアントに送信される値配列に含まれているかどうかを確認するための簡単なライブラリを作成しましたが、管理が非常に困難です。フォーム名の変更を防ぐために、送信された入力名の配列がクライアントから取得したものとまったく同じかどうかを確認します。
PS別の解決策は、定義済みのデータベースフィールドを使用して、いくつかの値のみを受け入れる場合があります。ただし、オプションリストは実際のデータベースオブジェクトから動的に生成される可能性があるため、Grail ではありません。