HabréはSPB .NETコミュニティについてまだ書いていないので、おそらくそれから始めます。 6月、.NETプログラマーのコミュニティがサンクトペテルブルクに集まりました。 私たちの目標は、作業中に遭遇した問題を解決する経験を共有し、オフラインで集まって現在の問題や.NETの世界からのニュースについて話し合うことです。 現在、プラットフォームは開発ブームを迎えています。ここでは、膨大な量のコードがオープンソースで公開され、新しいWebプラットフォームが登場し、2つの新しいC#言語標準についての議論が行われています。 ルイスが言ったように、我慢するには、走らなければなりません。 そして、全員が一緒に走ると、追いつく可能性が高まります(ランナーは比metaを理解します)。 それで、すでに行われたこと。 最初の会議を開催し、 IT Global Meetupで島を組織し、4つのプレゼンテーションを行い、お互いを知り合い、将来の計画について話し合うことができました。 レビューから判断すると、私はレポートが好きで、.NETパーティーの定例会議を復活させるというアイデアはすでに頭にありました。
現在、2回目の会議を準備しています。 DataArtのサンクトペテルブルクオフィスで6月25日、19時30分に開催されます 。会議の主なトピックは、 安全なアプリケーションの開発でした 。 今週の木曜日、情報セキュリティ全般、特に.NETプラットフォームの有名な専門家であるVladimir Kochetkov VladimirKochetkovがサンクトペテルブルクにやって来ます。 彼は私たちの会議に参加することに同意したので、ブログ、ウェビナー、またはRSDNチームでの彼の仕事でVolodyaに精通している人は、彼と個人的にチャットする機会があります。 会議プログラムには2つのレポートと多くのコミュニケーションがあります。これらは「アプリケーションセキュリティ.NET理論」ウラジミールコチェトコフと「アプリケーションセキュリティ.NETプラクティス」ミハイルシェバコフです(私のレポート)。 最近の会議でこのトピックに関する資料、この.NEXT 、 dotnetconf.ru 、 SECONと話しました 。 しかし、mitapのために、彼は会議で分析する新しい例とタスクを準備しました。 ああ、はい、タスク... mitapについてはもう説明しません。spbdotnet.orgコミュニティグループの発表を読んで、 ここに登録してください 。 参加はもちろん無料です。登録のみが必要です(残念ながら座席数は制限されていますが、無料の座席があります)。
そして今、タスクの注意。
- セキュリティの問題には、次のaspxページのコードが含まれていますか? 含まれている場合、どのコードのどの行にありますか? アスタリスクの付いた質問:攻撃を実証するためにサーバーに送信する必要があるデータは何ですか? コードを実行するための条件は標準です。デフォルト設定のIIS 8.5サーバーでは、aspxページはデフォルト設定のWebプロジェクトの一部であり、Framework 4.5.1で構築されます。
<%@ Page Language="C#" AutoEventWireup="true"%> <script language="C#" runat="server"> protected void Page_Load(object sender, EventArgs e) { var text = TextBox1.Text + TextBox2.Text; if (text != String.Empty) { Label1.Text = "Input: " + text; } else { TextBox1.Text = Request["first"] + Request["second"]; } int count; if (Int32.TryParse(Request["count"], out count)) { for (int i = 0; i < count; i++) { var name = String.Format("base64_item{0}", i); var value = Request[name]; if (value != null) { RadioButtonList1.Items.Add(new ListItem(Encoding.UTF8.GetString(Convert.FromBase64String(value)), value)); } } } } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> </head> <body> <!-- <asp:Label runat="server"> <%= Request["first"] + Request["second"] %> </asp:Label> --> Preview: <img src="<%= ResolveUrl("~/Content/Images/" + Request["page"] + ".png")%>"/> <form id="form1" runat="server"> <asp:Label ID="Label1" runat="server"></asp:Label><br/> <asp:RadioButtonList ID="RadioButtonList1" runat="server"/><br/> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br/> <asp:Button ID="Button1" runat="server" Text="Save"/> </form> </body> </html>
- 次のC#コードにはセキュリティの問題が含まれていますか? 攻撃者はどのようにして脆弱性を利用できますか? このコードをどのように修正しますか? データベースへのアクセスはEntity Frameworkのクラスを介して行われ、CoinsDBはデータベースのコンテキストクラスであり、DbContextの後継です。 CustomerLoginは、データベースのエンティティのクラスです。そのコードは次のとおりです。 上記の例のように、コード実行条件は標準です。データベースはMS SQLです。
protected void Page_Load(object sender, EventArgs e) { using (var db = new CoinsDB()) { var where = String.Empty; var parameters = new List<object>(); var email = Request["email"]; if (email != null) { where += String.Format(" email LIKE '{0}%'", email); } var field = Request["field"]; var min = Request["min"]; var max = Request["max"]; if (field != null && min != null && max != null) { if (!String.IsNullOrEmpty(where)) { where += " AND"; } where += String.Format(" {0} >= @min AND {0} <= @max", EncodeSqlField(field)); parameters.Add(new SqlParameter("@min", min)); parameters.Add(new SqlParameter("@max", max)); } var query = "SELECT * FROM CustomerLogin"; if (!String.IsNullOrEmpty(where)) { query += " WHERE"; query += where; } var output = db.Database.SqlQuery<CustomerLogin>(query, parameters.ToArray()).ToArray(); lblOutput.Text = output.Length == 0 ? "Not found" : String.Join("<br/>", output.Select(customer => customer.login + " - " + customer.rating)); } } private string EncodeSqlField(string field) { return field.Replace("'", String.Empty) .Replace(" ", String.Empty) .Replace("\\", String.Empty) .Replace(",", String.Empty) .Replace("(", String.Empty) .Replace(")", String.Empty); } [Table("CustomerLogin")] public partial class CustomerLogin { [Key] [StringLength(100)] public string login { get; set; } [StringLength(100)] public string email { get; set; } public long raiting { get; set; } public long customerNumber { get; set; } [Required] [StringLength(40)] public string password { get; set; } public short? question_id { get; set; } [StringLength(50)] public string answer { get; set; } }
回答、ネタバレの下にコメントを書いてください。 6月25日に会議で興味深い事例をすべて分析します。