2

ユーザーのコメントをデータベースに保存することを計画していて、ユーザーが提供する生のテキストには何でも含めることができるので、どのように保存するのか考えていました。これに関する一般的/グッドプラクティスは何ですか?テキストを解析する必要がありますか、それとも使用する必要のある特別なストレージタイプがありますか?非常に長くなる可能性のあるユーザーコメントを解析することは、多くのオーバーヘッドのように思われ、メッセージなどの意図された意味を改ざんしたくありません。同じコメント/フォーラム投稿を扱うのは奇妙に思えました。ユーザー名/パスワードを言ってサニタイズするようにマナー。

私はsqlite3データベースをクエリするためにいくつかのスクリプトを使用しており、次の行に沿って何かを実装することを計画していました:

page_id    post_number    username    content
-------    -----------    --------    -------
1          1              user_23     blah there's blah "quote" blah;':".,-=.

しかし、もちろん、contentパラメータをクエリに拡張するだけの場合は、などINSERTでさまざまな問題が発生します。' "

contentこの表のをどのように処理する必要がありますか。このようにテーブルに入れるべきでしょうか?どのデータ型を使用する必要があるかなど。

4

3 に答える 3

1

SQLインジェクション攻撃を回避し、クエリ文字列のフォーマットを容易にし、blobデータの処理を可能にするために、すべてのデータベースはパラメーターをサポートしています。

Pythonでは、次のようになります。

id = 1
text = "blah ..."
cursor.execute("INSERT INTO mytable(id, content) VALUES(?, ?)", (id, text))
于 2012-10-13T17:31:50.930 に答える
1

使用するデータ型は、入力の全体的なサイズによって異なります。テキストが私の最初の選択肢になります。

sqlite3データ型の詳細については、 http: //www.sqlite.org/datatype3.htmlを参照してください。

入力をサニタイズし、必要なマークアップのみを許可することをお勧めします。データベースに安全に挿入できるように、コンテンツをエンコードします。

セキュリティが深刻な懸念事項である場合、この処理はサーバー側で実行する必要があります。この処理負荷の一部をjavascriptにかけることは問題ありません。これにより、サーバーで行われる作業が減ります。それでも、機能を回避しようとしているユーザーを捕まえることができます。

于 2012-10-13T17:39:56.203 に答える
0

私はPythonに興味がありませんが、あなたのDBドライバーはすでにそれを処理していませんか?それ以外の場合は、これらの文字を手動でエスケープに置き換える必要があります。

このスレッドを見てください: PythonでSQLIN句を文字列形式にする方法

于 2012-10-13T17:27:44.153 に答える