如何处理数据库中的用户注释

时间:2012-10-13 17:23:17

标签: python database sqlite cgi

我计划将用户评论存储在数据库中,并且想知道如何存储用户将提供的原始文本,因为它可以包含任何内容。对此有什么共同/良好做法?我是否需要解析文本或是否存在我应该使用的特殊存储类型?解析用户评论似乎有很多开销可能会很长,而且我不想篡改消息的预期含义等。在同一个评论/论坛帖子中处理它似乎很奇怪庄园称用户名/密码并消毒。

我使用sqlite3和一些脚本来查询数据库,并计划实现以下内容:

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

但是,当然,如果我只是将content param扩展到我的INSERT查询中,那么' "等会出现各种问题。

我应该如何处理此表中的content;它应该像这样在桌子上吗?我应该使用哪种数据类型等。

3 个答案:

答案 0 :(得分:1)

为了避免SQL注入攻击,为了使查询字符串的格式化更容易,并且可以处理blob数据,所有数据库都支持parameters

在Python中,它看起来像这样:

id = 1
text = "blah ..."
cursor.execute("INSERT INTO mytable(id, content) VALUES(?, ?)", (id, text))

答案 1 :(得分:1)

要使用的数据类型取决于输入的整体大小。 文字将是我的第一选择。

有关sqlite3数据类型的更多信息,请参阅 http://www.sqlite.org/datatype3.html

我会推荐你 清理输入,只允许必要的标记。 对内容进行编码,以便可以安全地插入数据库。

如果安全性是一个严重问题,那么这个处理应该在服务器端完成。将一些处理负载放到javascript上也不会有害,这将减少在服务器上完成的工作。它仍会抓住用户试图规避该功能。

答案 2 :(得分:0)

我没有进入python,但你的数据库驱动程序是不是已经处理好了?否则,您必须手动替换转义那些字符。

看一下这个帖子: How to string format SQL IN clause with Python