- ベストアンサー
<>&などの保存方法と注意点
- 保存する際に<>&などの特殊文字を含める場合、適切なエスケープ方法を使用する必要があります。
- 保存する際に<>&などの特殊文字がエラーとなる原因は、SQLインジェクション攻撃の可能性があるため、注意が必要です。
- 特殊文字を含むデータを保存する際は、パラメータ化クエリを使用してデータベースに安全に保存するようにしましょう。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
あぁ、これですかね。 http://d.hatena.ne.jp/yourvoice/20051005/1128532635 テキストボックスに html のタグっぽい物を入力するとエラーになるってやつ。 その aspx の html ソースの先頭にある <%@ Page Language="VB" ~ %> の中に ValidateRequest="false" てのを入れてみてください。 ただしこれは入力値のチェックを行わなくする宣言です。 下記ページ等を読んで安全性を確保するようにしてください。 http://msdn.microsoft.com/ja-jp/library/bb355989.aspx 今回のケースではパラメーター化しているのでザルではないと思いますが。
その他の回答 (3)
- temtecomai2
- ベストアンサー率61% (656/1071)
#3 です。 ValidateRequest="false" はすでに #2 さんが言ってますね。 もし当たりなら #2 さんにポイントをあげてください。私はいりません。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
<>& ↑これを入力すると ※パターン1 DBの書き込みロジックでエラーが発生 ※パターン2 Post時にエラーが発生し、DBの書き込みロジックにまでたどり着いていない が考えられます。 #1のtemtecomai2さんが、DBの書き込みロジックを検証してくれているので、パターン2を疑います。 ASPXファイルの先頭に <%@ Page ~~~~~~ %> があると思います。 ValidateRequest="false" を追加してみてください。 それでやってみてどうなりますか?
- temtecomai2
- ベストアンサー率61% (656/1071)
例えばどんな文字列で、どこの行でどんなエラーが出ますか? ASP.NET で追試してみましたが正常に投入できましたよ。 Dim sql As String = "INSERT INTO tableA(Name, Comment) VALUES(@Name, @Comment)" Dim conStr As String = "Data Source=hogePC;Initial Catalog=testDB;Persist Security Info=True;User ID=hogeUser;Password=hogePassword" Using con As New SqlConnection(conStr) con.Open() Using cmd1 As SqlCommand = con.CreateCommand() cmd1.CommandType = Data.CommandType.Text Try With cmd1 .Parameters.Add("@Name", Data.SqlDbType.NVarChar) .Parameters.Add("@Comment", Data.SqlDbType.NVarChar) .Parameters("@Name").Value = NameTextBox.Text .Parameters("@Comment").Value = CommentTextBox.Text .CommandText = sql .ExecuteNonQuery() End With Catch ex As Exception Finally con.Close() End Try End Using End Using
補足
回答ありがとうございます。 エラーになる内容なのですが <日本語>なら保存ができるのですが どうやら<123ABC>など<>の中を半角英数字にすると エラー:Sys.WebForms.PageRequestMasagerServerErrorrException: サーバーで要求を処理中に不明なエラーが発生しました。 サーバーから返された状態コード500 というエラーになります。 半角英数字が使いたいのですがどうしたらいいでしょうか? よろしくお願いします。
お礼
ValidateRequest="false"をし 読み込みに TextComment.Text= System.Web.HttpUtility.HtmlEncode(dr("comment") で表示されました。ありがとうございます。