2011-06-30 95 views
2

我有一个由2个字段(标题和注释)组成的注释表单。数据库包含3列ID,标题和评论。评论是基于它的title像domain.com/index.php?id=sometitle注释字段中的sql注入

标题字段被正确地固定使用mysql_real_escape_string SQL注入,但注释字段是一个textarea处于打开状态没有逃脱显示。我可以逃避它,但是我想知道它可以做些什么,只要不在该字段上使用mysql_real_escape_string就可以了,因为知道标题已经被转义并且它是如何获取输出的。

+1

“我想知道它可以做些什么,只是不使用该字段上的mysql_real_escape_string就可以做到这一点” - 您对您的数据有多重要? –

+1

MySql中没有参数化查询吗? –

+0

@mitch。这不是问题。我问,所以我知道这是如何工作的。 – Pinkie

回答

7

如果有人在你的textarea中键入了这个字符会发生什么。

some comment');DELETE FROM COMMENTS;-- 

如果查询插入注释是像

INSERT INTO Comments(Title,Comment) VALUES('$title','$comments'); 

那么你将有一个问题。结果查询将

INSERT INTO Comments(Title,Comment) VALUES('some title','some comment');DELETE FROM COMMENTS;--' 

或将其布局在一个更可读的格式

INSERT INTO Comments(Title,Comment) VALUES('some title','some comment'); 
DELETE FROM COMMENTS;--' 

的 - ”在刚刚结束创建了一个评论,摆脱任何额外的SQL的那会使其不能正确解析。

+0

感谢您的解释。我现在明白了。 – Pinkie

2

所有未转义的字符串都可以用来注入SQL。

+0

如果没有我的问题的例子,我无法理解这一点。评论栏如何干扰注射。 – Pinkie

+0

咦?我不知道你的问题是什么。两个领域没有区别。 – SLaks

+1

如果我的评论是类似“真是太棒了”);丢表; - '网站!那么你会遇到麻烦。 –

2

如果有人在textarea中使用SQL注入,它将在数据提交到数据库时运行,这就是为什么您先将其转义。

+0

如何插入注释字段导致sql注入。我们正在谈论输入而不是输出。 – Pinkie

+0

http://en.wikipedia。org/wiki/SQL_injection – steve

+2

给我链接到您的网站。我会告诉你...... –

2

逃脱它。假设用户是发表评论的用户,那么您在注释部分注入时很容易受到攻击,这些注释部分将在表单发布后执行,而不是请求查看注释。

2

不要让该字段未转义。这个领域与什么联系并不重要。在查询形成时,注入器可以返回密码字段等。

要真正清除任何使用sql注入的尝试,您需要使用存储过程。如果你有权访问它,你应该使用PDO