0

こんにちは、記事にソーシャル共有ボタンを動的に配置しようとしています。記事のテキストと共にソーシャル共有スクリプトをデータベースに挿入し、それを一意の共有リンクで表示したいと考えています。だから私はこのようにコーディングしています。これは良い考えではないかもしれませんが、この方法で可能かどうか知りたいです。

string socialButton = "
<div id='social_nav_horizontal'>    <h3>        Bookmark or Share This Post</h3>    <ul>        <li>            <a class='delicious' href='http://del.icio.us/post?url=Your website title' title='Share this on del.icio.us'>Delicious</a></li>     <li>            <a class='facebook' href='http://www.facebook.com/sharer.php?u=http://yourwebsite.com'>Facebook</a></li>        <li>            <a class='stumbleupon' href='http://www.stumbleupon.com/submit? url=http://www.yoursite.com/'>Stumble</a></li>      <li>            <a class='twitter' href='http://twitter.com/home?status=Your Website Title- http://yourwebsite.com@TwitterUserName'>Twitter</a></li>    </ul></div><p>  &nbsp;</p>";

したがって、「myArticleTable (articleText) の値に挿入します ('"+socialButton + articleText.Text+"')"; ただし、挿入しようとすると例外がスローされます。

System.Data.OleDb.OleDbException: Syntax error (missing operator) in query expression ''

これは、自分のckeditor (wysiwyg)リッチ テキスト エディターに直接貼り付けて、ボタン クリック イベントで挿入ステートメントを実行した場合にのみ機能します。

手伝ってくれますか?

ありがとうございました

4

2 に答える 2

1

文字列の開始と終了を示すために一重引用符が使用されるため、文字列をエスケープする必要があります。簡単な答えは、SQLデータベースが値を'として格納するために、2つの一重引用符--''-を使用することです。

Ex:-
Insert into Person
(First, Last)
Values
('Joe', 'O''Brien')

REPLACEを使用して着信値をサニタイズすることを検討してください。

''''をチェックし、文字列に存在する場合は''''''に置き換えて、単一引用符をエスケープします。

于 2012-12-01T22:01:02.527 に答える
1

まだ気づいていませんが、コードにSQLインジェクションの脆弱性を発見したばかりです。基本的に、サーバー上でこのコードを実行できる人は誰でも、悪意のあるSQLを記事の中に入れて、実行されます。

これは、エラーが偽装して言おうとしていることです。リンク/記事の内容を解釈し、SQLの一部にしました。これは構文的に正しくありませんでした。socialButton値をarticleText.Text手動でエスケープしようとしないでください。代わりに名前付きパラメーターを使用してください。

insert into myArticleTable (articleText) values (?)

そして、このパラメータに次のようなものを入力します。

cmd.Parameters.AddWithValue("parm1", socialButton + articleText.Text);

文字列を連結してSQLを手動で生成しないでください。さらに、名前付きパラメーターははるかにクリーンです。

免責事項:私は.NET開発者ではありません。複雑なOleDBクエリをパラメーター化する方法からコードスニペットをコピーしましたか?oledbパラメータを使用してテーブルを更新する方法は?しかし、同じルールが事実上すべての言語に適用されます。

于 2012-12-01T22:02:18.830 に答える