我有一个评论表单,包含2个字段(标题和评论)。数据库包含3列id,标题和注释。评论显示基于title
,如domain.com/index.php?id=sometitle
使用mysql_real_escape_string为sql注入正确保护标题字段,但是作为textarea的注释字段保持打开而不转义。我可以逃脱它,但是我想知道如果不知道标题已经被转义并且它是如何检索输出而不在该字段上使用mysql_real_escape_string而离开它会有什么害处。
答案 0 :(得分: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。
答案 1 :(得分:2)
所有未转义的字符串都可用于注入SQL。
答案 2 :(得分:2)
如果某人在textarea中使用SQL注入,它将在数据提交到您的数据库时运行,这就是您首先将其转义的原因。
答案 3 :(得分:2)
逃避它。假设用户是发布评论的用户,那么您很容易在评论部分注入,这将在他们发布表单时执行,而不是请求查看评论。
答案 4 :(得分:2)
请勿让该字段脱离。这个领域与之相关联并不重要。在形成查询时,注入器可以返回密码字段等。
要真正清除任何使用sql注入的尝试,您需要使用存储过程。如果您有权访问它,则应使用PDO。