nosniff 1.0.1
必ず X-Content-Type-Options: nosniff レスポンスヘッダをつけるようにしましょう
機密情報を含むJSONには X-Content-Type-Options: nosniff をつけるべき - 葉っぱ日記
とのことなので、ASP.NET でカスタム HTTP ヘッダを追加する方法 - しばやん雑記 を参考に X-Content-Type-Options: nosniff を付ける NuGet を作っておいた。
Web.config.transform を記述しただけのシンプルなものだけど、いかがでしょうかね。
続きを読む
WebMatrix 3: Sinatra on ASP.NET 「Nancy」 を利用する
Nancy is a lightweight, low-ceremony, framework for building HTTP based services on .Net and Mono. The goal of the framework is to stay out of the way as much as possible and provide a super-duper-happy-path to all interactions.
Hosting Nancy with asp.net · NancyFx/Nancy Wiki · GitHub
Scott Hanselman 氏のブログ(One ASP.NET: Nancy.Templates for Visual Studio - Scott Hanselman)で知ったのですが、 「Nancy」なんてのがあるんですね!
前々からこういうのがほしいなって思ってたんですよね……。
個人的に一番おすすめなのは Pure HTML または Razor (ASP.NET Web Pages)かな。 HTML5/CSS3(Pure HTML)で書くところからはじめて、変数とテンプレート、初歩的なデータベースが使いたくなれば Razor へ進めばいい。もっと大規模なWebサイトであれば、 ASP.NET MVC が利用できるけど、これはちょっと個人用途にはデカすぎる気がした(その中間に、 Ruby で言えば Sinatra とか、軽いフレームワークがあればいいなぁ、と思う)。仮想化だのクラウドだのという言葉を忘れて、 HTML ファイルひとつ、ぽつんと Azure Web Sites に置くところから始めてもらえればと。
#GoAzure に行ってきました! - だるろぐ
で、試そうかなって思ったまま、ちょっとストアアプリの方に浮気している間に、しばやん氏がいろいろ調べてくれていました。
ありがとう! さっそく WebMatrix で動かしてみますかネ。
ちなみに、Nancy は Frank Sinatra のお嬢さんです(ナンシー・シナトラ - Wikipedia)。Sinatra の名前も Frank Sinatra から来ているはず。
続きを読む少しずつ Web サイトのリニューアルをしていきます。
まずはここから。
仕組み的には Markdown テキストを App_Text フォルダに入れておいて、それを HTML に変換しています。Helper でプラグインっぽく拡張できるのがちょっと自慢。
ソーシャル関連のボタンは、この一連の記事で実装してみたものを使っています。
- WebMatrix 3: フィードの購読者数を取得する(1:サーバーサイド編) - だるろぐ
- WebMatrix 3: フィードの購読者数を取得する(2: JavaScript 編) - だるろぐ
- WebMatrix 3: フィードの購読者数を取得する(3: CSS 編) - だるろぐ
- WebMatrix 3: JSON と JSONP - だるろぐ
フィードの出力は以下の記事で実装したものをベースにしています。
今のところキャッシュ機能がないのでそれをつけようかなぁ、と。それ以外にも不満な部分が結構あるので、このサイトで十分に基本機能を練って NuGet パッケージにし、ほかのサイトにも展開していきたいと思います。
WordPress のような既存の大規模 CMS を使うのもいいけど、自分で少しずつ実装した方が“自分の手のひらの上で動かしている”感じがあって僕は好きです。
Windows Azure Web Sites を使って Dropbox からデプロイできたら便利そうなのだけど、ボクのお給料では Azure の維持は少し大変そうなので泣く泣く断念しました。おちんぎんほしぃなりぃ。
P.S.
ロゴ、イケてない?
WebMatrix 3: JSON と JSONP
- WebMatrix 3: フィードの購読者数を取得する(1:サーバーサイド編) - だるろぐ
- WebMatrix 3: フィードの購読者数を取得する(2: JavaScript 編) - だるろぐ
- WebMatrix 3: フィードの購読者数を取得する(3: CSS 編) - だるろぐ
一連の記事では、FeedCount の結果を JSON でやり取りしていました。
JSON
サーバーサイド
// ~/FeedCount.cshtml Response.Clear(); Response.ContentType = "application/json"; Response.Write(Json.Encode(data)); Response.End();
渡されるデータ(例)
{"livedoor":6,"total":6}
クライアントサイド
// ~/Script/SocialButtons.js $.ajax({ url: '/FeedCount/' + url, dataType: 'json', success: function (json) { element.text(json.total || 0); } });
けれど、Twitter や Facebook における共有数は JSONP で処理していました。それに合わせて、FeedCount も JSONP で処理できないか? と思ったのですが、$.ajax の dataType を 'jsonp' にするだけでは動きません。サーバーサイドにも手を加えなければならないみたい。
WebMatrix 3:危険な可能性のある Request.Path 値がクライアント (:) から検出されました。
WebMatrix 3: フィードの購読者数を取得する(1:サーバーサイド編) - だるろぐ の補足。
http://localhost:11330/FeedCount/https://blog.daruyanagi.jp/
このような URL を受け取ると、
危険な可能性のある Request.Path 値がクライアント (:) から検出されました。
というエラーが出てしまいます。これは ASP.NET のセキュリティ機能のようですね。ただ、自分は Web 系のセキュリティにあまり詳しくないので、これがどのように悪用できるのかさっぱりわからないのですが……(SQLインジェクションかなにかかなぁ?)。いい本をご存知でしたら、どなたか教えてください。
とりあえず、今回はこれを解除してしまいます。あとは自己責任で……
続きを読むWebMatrix 3: フィードの購読者数を取得する(1:サーバーサイド編)
こんな感じのソーシャル共有+ RSS 購読ボタンをサイトに追加したいな、と思って、今朝少し WebMatrix と格闘していた。
SNS における共有数の取得部分は JavaScript だけで完結するのだけれど、RSS 購読数の取得部分は JavaScript だけでは少ししんどいのかなぁ。Same origin policy というものに引っかかってしまう。まぁ、こういうときは WebMatrix でサーバー側に RSS 購読数を取得するようにすればいいよね。
続きを読むWebMatrix 3: RSS フィードを出力する(解決編)
できた!
と思ったけど、Internet Explorer ではちゃんと表示できない。なんか XML が尻切れトンボで出力されておる……
WebMatrix 3: RSS フィードを出力する - だるろぐ
この問題を解決しておきましょう。
続きを読むWebMatrix 3: RSS フィードを出力する
とあるフォルダー内のファイルのリストを RSS で出力したいなぁ、と思って昔に書いた記事(RSS 2.0 を実装する - だるろぐ)をコピペしてみたのだけれど、ちゃんと動かなかった……なぜだ。まぁ、原因を追求するのも面倒だったので、SyndicationFeed クラスを利用して書きなおしてみました。
@using System.IO @using System.Xml @using System.ServiceModel.Syndication @{ var url = new Uri(Request.Url.Scheme + "://" + Request.Url.Authority); // ココらへんはあんまり気にしないで var files = Directory.GetFiles(Server.MapPath("~/App_Text/")) .Select(_ => new FileInfo(_)) .Where(_ => !_.Name.StartsWith("_")) .OrderByDescending(_ => _.LastWriteTime) .Take(10); var feed = new SyndicationFeed(App.Title, App.Description, new Uri(url, "Feed")) { Copyright = new TextSyndicationContent(App.Copyright.ToString()), Items = files.Select(file => { var name = Path.GetFileNameWithoutExtension(file.FullName); // ファイルの内容を読み込んで自作の Markdown エンジンにかけている var content = TextFormatEngine.Transform(File.ReadAllText(file.FullName)); return new SyndicationItem( name, content.ToString(), new Uri(url, name), name, file.LastWriteTime ); }), }; Response.Clear(); Response.ContentType = "application/xml"; var writer = XmlWriter.Create(Response.Output); feed.SaveAsRss20(writer); Response.End(); }
できた!
と思ったけど、Internet Explorer ではちゃんと表示できない。なんか XML が尻切れトンボで出力されておる……
WebMatrix 3:SwissKnife.T4.AppSettings を使う
Web.config の appSettings セクションをもとにクラスを生成してくれる T4 テンプレート SwissKnife.T4.AppSettings がよさげなので、これが WebMatrix 3 も使えないかなぁ、といろいろ試してみた。
続きを読む