読者です 読者をやめる 読者になる 読者になる

ボクココ

サービス開発を成功させるまでの歩み

ユーザーの入力を"絶対に"信じてはいけない

ども、@kimihom です。

f:id:cevid_cpp:20160216220859p:plain

Webアプリケーションにおいて、「ユーザーの入力を信じてはいけない」というのは Web エンジニアなら耳にタコができるくらい聞いていることだろう。テキストボックスに数字しか入れられないものに対して文字を入力されちゃったり、チェックボックスなのにHTTPツールを使って変な値を入れられたりといった具合にだ。だから JavaScript の検証だけでなく、サーバー側でも送られた値を検証しろ、と。

そんで今回言いたいのはそもそもの話で、ユーザーはちょっとでも動かないとイライラして連続してクリックしてくるケースがあるのだ。これは特にせっかちなユーザーがその行動を起こしやすい。そして時にその行動はシステムに深刻な影響を及ぼす。テキストボックスの値不正入力なんて可愛らしいものだ。

てことで今回の入力は最もシンプルな「クリック」について。

ダブルクリックという癖

私たちWebネイティヴな皆さんなら、Web上にボタンがあったとしても、ダブルクリックをしようとは思わないだろう。ただ Web ブラウザとデスクトップの区別もあまり気にしないような方は平気で大事そうなボタンほどダブルクリックしたがる。

想像もしたくないが、決済の時のボタンとか普通にダブルクリックしてくるのだ。ちゃんと対策しないとどういう結末になるか、わかるよね?

動かないと連打する

ユーザーに "あれ?" と思わせてしまったら最後。奥の手の"連打"をし始める。こちら側からすれば頼むからそんなことをしないでくれ、と思う。けどこの事実を変えることはできない。クリックした時に、クリックしたよ、と表現できなければ待つのは悲惨な結果のみだ。

Rails におけるフォームアクション

Rails ならとてもシンプルに一回のクリックであることを保証できる。 disable_with を使おう。I18n 使えよとかそういう細かいツッコミはなしね。

<%= submit_tag "確定", data: { disable_with: '送信中'}, class: "submit" %>

これで一回クリックしたら、送信中 とでてそれ以降のクリックを防ぐことができる。CSS/JavaScript でもクリックしたら何かしらボタンが反応するような工夫をしよう。

そう、"ユーザーの入力を絶対に信じてはいけない"のだから。