【问题标题】:php make posts safephp 使帖子安全
【发布时间】:2011-10-26 14:52:16
【问题描述】:

我在处理最简单的任务时遇到了麻烦。 html 页面有一个 textarea 标记,它使用带有 jquery 的 $.get() 将数据发送到 php 文件

从那里我使用了从 htmlspecialchars 到 addlashes 的各种方法。 但似乎没有什么能按应有的方式工作,要么因为留下一个 \ 而抛出错误,要么没有保留换行符。

如何将 textarea 的值传递给 php 文件,使其具有注入证明和 json 兼容。 这样当我使用 mysql 访问它并使用 $.formatJSON() 对其进行格式化时。它可以正常工作并保留所有换行符?

//php

$result = htmlspecialchars($_GET["message"]);

mysql_query("INSERT INTO table (message) VALUES ($result)");


//jquery
$.ajax({
 url:("http://websitename.com/post.php?message=" + message + "&callback=?"),
 dataType: 'JSONP',
 success:function(json){
    callback($.parseJSON(json));
 },
 error:function(){
 },
});

【问题讨论】:

  • 如果这是您的实际代码,那么您的 SQL 是错误的。您需要在尝试插入的字符串中添加单引号。 mysql_query("INSERT INTO table (message) VALUES ( ' $result ' )"); 并在插入前转义字符串。
  • 这就是重点,能够在保留正确字符的同时逃脱麻烦的字符。 php代码也只是一个例子。

标签: php jquery mysql code-injection


【解决方案1】:

现在推荐的做法是使用prepared statements。这样 SQL 注入就不可能了。如果在分析代码后证明这太慢了,你应该求助于使用 mysql_(real_)escape_string。

作为另一个安全步骤,您可以安装像PHPIDS 这样的入侵检测系统来添加另一个安全层。

不要使用添加斜杠或类似的东西,它们不是为了逃避 SQL 查询的用户输入。

同样在你的情况下,你不应该通过 GET 传递 textarea 内容,而是通过 jQuery documentation 中描述的 POST。此外,dataType 应该是 'json',之后您不需要解析它。在 jQuery 中从 PHP 获取 JSON 的示例是 here

【讨论】:

  • 我不会推荐 phpids 或类似的东西。他们所能做的只是猜测请求是否看起来像潜在的邪恶。因此,认为您是安全的,您可能会遇到巨大的漏洞或误报。仔细写作,使用准备好的语句并不难。 +1 虽然
【解决方案2】:

在 MySQL 查询中使用值之前,请使用 mysql_real_escape_string。此外,您应该在($result) 中为$result 加上单引号。

【讨论】:

  • 致反对者:如果我的帖子没有用处的原因在评论中得到解释,我将不胜感激。
猜你喜欢
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2020-02-07
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 2019-07-28
相关资源
最近更新 更多