0

我是网络编程新手,一直在探索与网络安全相关的问题。

我有一个表单,用户可以在其中发布两种类型的数据 - 我们称它们为“安全”和“不安全”(从 sql 的角度来看)。

大多数地方建议在清理“不安全”部分(使其“安全”)之后将数据的两个部分存储在数据库中。

我想知道另一种方法 - 将“安全”数据存储在数据库中,将“不安全”数据存储在文件中(数据库外部)。当然,这种方法会产生一系列与维护文件和数据库条目之间的关联相关的问题。但是这种方法是否还有其他重大问题,尤其是与安全有关的问题?

更新:感谢您的回复!抱歉,我不清楚我认为什么是“安全的”,因此需要进行一些澄清。我正在使用 Django,我认为“安全”的表单数据是通过表单的“cleaned_data”字典访问的,该字典执行所有必要的转义。

出于这个问题的目的,让我们考虑一个 wiki 页面。wiki 页面的标题不需要附加任何样式。因此,这可以通过表单的“cleaned_data”字典访问,该字典会将用户输入转换为“安全”格式。但由于我希望为用户提供任意设置内容样式的能力,我可能无法使用“cleaned_data”字典访问内容部分。

文件方法是否解决了这个问题的安全方面?还是我忽略了其他安全问题?

4

4 回答 4

1

你知道你所说的“安全”数据吗?它不是。这一切都是不安全的,你应该这样对待它。不是通过将其存储在文件中,而是通过正确构造 SQL 语句。

正如其他人所提到的,使用准备好的语句或模拟它们的库是要走的路,例如

$db->Execute("insert into foo(x,y,z) values (?,?,?)", array($one, $two, $three));
于 2008-10-09T06:41:47.373 回答
0

你认为什么是“安全”和“不安全”?您是否考虑将带有斜线的数据转义为“安全”?如果是这样,请不要。

使用带有 SQL 占位符的绑定变量。这是防止 SQL 注入的唯一明智方法。

于 2008-10-09T06:24:12.527 回答
0

拆分数据不会保护您免受 SQL 注入,它只会限制可以通过它公开的数据,但这并不是攻击的唯一风险。他们还可以删除数据、添加虚假数据等。

我认为没有理由使用您的方法,特别是考虑到使用准备好的语句(在许多(如果不是全部)开发平台和数据库中都支持)。

甚至没有进入你的方法最终会成为的噩梦。

最后,如果您不信任数据库,为什么还要使用它?如果您愿意,只需使用普通文件,混合是不行的。

于 2008-10-09T06:28:08.057 回答
0

SQL注入不仅可以针对整个数据库用户,而且是查询(中毒查询)的问题,所以对我来说,避免SQL注入攻击的最好方法(如果不是唯一的)是控制你的查询,保护它免受注入的可能性恶意字符而不是拆分存储。

于 2008-10-09T06:36:28.663 回答