【问题标题】:Am I protecting my website enough from sql injection?我是否足够保护我的网站免受 sql 注入?
【发布时间】:2012-10-24 20:13:28
【问题描述】:

我创建了一个网站,我只显示我的数据库表中的项目,我将变量从一个页面传递到另一个页面以显示某些项目,没有添加、删除或编辑我的表项目在我的网站上只是显示信息。

$aaa = _POST['aaa'];

$databasehost = "localhost";
$databasename = "mydb";
$databaseusername = "user";
$databasepassword = "password";

// Connect to the database server
$dbcnx = @mysql_connect($databasehost, $databaseusername, $databasepassword);
 if (!$dbcnx) {
 echo( "<font color='red'><P>can't connect to server.</P></font>" );
 exit();
  }
 // Select the database
 if (! @mysql_select_db($databasename) ) {
 echo( "<font color='red'><P>can't connect to db </P></font>");
 exit();
  }

 $aaa = mysql_real_escape_string($aaa)

 // and with $aaa I do my query

我已经阅读到使用 mysql_real_escape_string() 保护我的变量我停止了对我的查询的任何注入,但我觉得很容易受到以下影响:

 $databasehost = "localhost";
 $databasename = "mydb";
 $databaseusername = "user";
 $databasepassword = "password";

我只是偏执,还是有办法保护这些连接到服务器和数据库的信息?

【问题讨论】:

  • 请不要使用mysql_* 函数编写新代码。它们不再维护,社区已经开始deprecation process。看到red box?相反,您应该了解prepared statements 并使用PDOMySQLi。如果你不能决定哪一个,this article 会帮助你。如果你选择 PDO,here is good tutorial。另见Why shouldn't I use mysql functions in PHP?
  • 以上是预设回复,但我相信它适用于您的问题。
  • 这条线$aaa = _POST['aaa'] 正在保护任何人不使用您的网站。
  • 为什么我使用 mysql_* 会得到负票?感谢您的更正以及向我展示了正确的方式,但我认为这不值得一票!
  • @Daedalus 谢谢你,我会调查的。

标签: php html mysql sql web


【解决方案1】:

这应该没关系,但如果您对此感到担心,只需使用 mysql_real_escape_string 转义所有传递到数据库的值作为字符串,然后将 intval/floatval 用于数值。

这不是完美的安全措施,但总比不这样做要好。

【讨论】:

    【解决方案2】:

    如果您的目标是严格防止通过 $aaa 变量进行注入,那么您应该没问题。正如@MikeG 指出的那样,您可能应该将连接信息移动到 Web 根目录之外的单独配置文件中以提高安全性(如果有人获得您的数据库凭据,您无需担心注入)。

    【讨论】:

    • 感谢您对 $POST 的评论,我想我的打字速度很快,但是在单独的配置文件中,您知道或有一个关于它应该是什么样子以及我如何从我的网页文件?
    • 您可以将变量直接注释到一个单独的PHP文件中,并在原文件中使用php.net/manual/en/function.require-once.php调用该文件。
    【解决方案3】:

    如果没有访问您的服务器,任何人都无法查看数据库连接信息(因为 PHP 在服务器上执行,而不是发送到用户的浏览器)。话虽如此,如果您担心,您可能需要考虑将这些变量放在配置文件中,并对其进行加密。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 2011-07-04
    • 1970-01-01
    • 2019-11-01
    • 2021-03-19
    • 2013-02-07
    • 2016-05-31
    相关资源
    最近更新 更多