ASP.NET core MVCを習得したくて・・・というよりASP.NET自体全く分かってない状況なので、Udemyでオンライン講座を受講しています。
https://pctips.jp/server/udemy-aspnet-1/
今回は学習の流れに沿って行くと、
今回の学習ポイント
セキュリティ対策として、CSRFと過多ポスティング攻撃対策をする
ようです。
ふーん・・・はい!出たー専門用語???
セキュリティ対策(CSRF)
クロスサイトリクエストフォージェリは、ウェブアプリケーションの脆弱性を悪用するサイバー攻撃の一種です。文字通り「サイト横断的に(Cross Site)リクエストを偽装(Request Forgeries)する」攻撃です。CSRFと略されシーサーフと呼ばれることが多くなっています。(引用:CyberSecurityTIMES)
いきなり英文の頭文字をとったようなわからん専門用語ですが調べてみました。
引用したサイトを見れば詳しくかいてありました。
自分が簡単に解釈したことは、ログイン状態を利用され悪意のある偽サイトなどからの送信データを本人になりすませてサーバーに入り込めるような事だと理解しました。
自分も良く、ログアウトしないで他のサイトに移動するような事がありますがCSRF対策をされてないようなWEBページだと危険だってことですね。
Udemyの学習内容では、その対策として、サイトにトークンを埋め込んで、サーバー側もトークンに一致しなければブロックするような対策をするようです。
トークンの設定方法
もう、既に最初から設定してあるようですが、データベースを操作するようなViewには、下記の様なトークンの設定がされていました。
@Html.AntiForgeryToken()
そのデータベースを操作するような送信が、TodoesContllers.csのコントローラーでトークンの判別をするようです。これも、スキャフォールディング機能にて追加したためなのか、既に最初から設定してありました。
[ValidateAntiForgeryToken]
セキュリティ対策(過多ポスティング攻撃)
この過多ポスティング攻撃ってのは、自分なりに解釈すると、
自分の解釈
Bindというのを設定しなくても自動で割り当ててくれてデータの操作をすることができるという仕様をセキュリティホールに使って、悪意のあるデータに改変することができるので、ちゃんとBindを設定するってことかなって理解しました。
今回のTodoアプリのテーブルを見ると、Doneというフィールドは、新規の時には表示の必要もありません。
しかし、Bindを設定してないとDoneのフィールドも操作することが可能になってしまうようです。
public ActionResult Create([Bind(Include = "Id,Sumary,Detail,Liait,Done")] Todo todo)
Bindを設定しなくても問題なく動くが過多ポスティング攻撃することが可能になってしまう。
public ActionResult Create( Todo todo)
今回の例題では、Doneは新規には必要ないので過多ポスティング攻撃対策をすると、Doneのフィールドは削除してしまう。
public ActionResult Create([Bind(Include = "Id,Sumary,Detail,Liait")] Todo todo)
更に、Create.cshtmlのDoneの部分はコメントアウトして最初から表示させないようにしました。
この回のまとめ
ASP.NET MVCの特徴でもある!?(まだ理解してない)スキャフォールディング機能という、データ操作WEBサイトが自動で作成できる機能ですが、最初から、CSRF対策ができておりセキュリティ対策もデフォルトで実装されていることが理解できました。
また、過多ポスティング攻撃に対しても、スキャフォールディング機能で自動生成された状態でのBindの設定などが分かってよかったと思う。
WEB上で公開するシステムだとセキュリティ対策もしっかりとしておかなければなりませんので、この回は為になったと思います。
とはいえ、本当にASP.NET MVCの開発ができるのかは不安ですが、とりあえず最後まで頑張ろうと思う。
https://pctips.jp/security/udemy-aspnet-3