我考虑一下如何正确逃生的数据来自外部世界之前它被用于应用程序的控制、储存、逻辑..那样的事情。

显然,与魔术的报价指令被废弃不久在php5.3.0+,并移除在php6,这就变得更加紧迫,对于任何想要升级,并进入新的语言功能,同时保持遗产代码(不我们喜欢它..).

然而,一件事,我还没有看到的是很多讨论关于理论/最佳实践做什么,一旦你有保护你的数据,例如,储存或没有斜杠?我个人认为保持逃脱的数据,该数据库是一个不好的移动,但想听到讨论和阅读某些情况下,研究最好..

一些链接,从PHP手册》只供参考:

PHP手 mysql_real_escape_string

PHP手 htmlspecialchars

等等等等。

什么建议吗?

有帮助吗?

解决方案

看看准备好的陈述。我知道在mysql中这非常有效,并且是一种将数据输入数据库的安全形式。它也有一些性能优势。

http://dev.mysql.com/tech -resources /物品/ 4.1 /制备-statements.html

如果您有兴趣,我会有更多资源。

希望这就是你要找的,tc。

编辑:

我可以添加的一件事是将过滤器与预处理语句结合使用。例如,要检查值是否为使用FILTER_SANITIZE_STRING,或者使用FILTER_SANITIZE_EMAIL的电子邮件。

这节省了一些代码并且运行良好。您可以随后使用自己的方法检查数据,但可以使用很多过滤器。

其他提示

  • 使用正确的方法逃脱的数据时运行查询: mysql_real_escape_string,编制查询,等等。

  • 数据存储在数据库中未改变

  • 使用正确的方法逃脱上的数据输出: htmlspecialchars,等等。

对于数据库工作,请检查参数化查询和预准备语句。 PDO mysqli 对此有好处。

Htmlspecialchars 是在html中显示某些文字的正确工具文档。

而且,正如您提到的php 5.3,您可以访问过滤功能处理用户数据时必须使用的。

对于数据库插入,解决方案是使用绑定变量

通常,每当你发现自己转义任何东西时(shell命令,db命令块,用户提供的html等参数),它表示你没有使用正确的函数调用(例如,使用<代码>系统,当你可以使用多个arg形式的 exec ),或者你的框架有缺陷。在缺陷框架中工作的标准方法是增强它,以便您可以回到不考虑引用。

考虑逃避的级别和引用的级别可能很有趣,但是如果你真的很喜欢那么在你的业余时间玩Tcl。对于实际工作,你不应该考虑引用,除非你设计一个供其他人使用的库,在这种情况下你应该正确引用并让你的用户不要考虑引用。 (并且你应该非常仔细地记录你做什么和不做什么样的引用)

这很简单。在将数据插入数据库之前,应通过 mysql_real_escape_string()运行所有传入数据。例如,如果您知道某些内容需要是一个整数,请在插入之前将其设置为整数,等等。请记住,这只是为了停止SQL注入。 XSS和数据验证是不同的。

如果你想要一些电子邮件,你显然需要在将它插入数据库之前验证它。

htmlentities()清理数据,这意味着修改数据。我认为您应始终将原始数据存储在数据库中,当您获取该数据时,请选择您希望如何对其进行清理。

我喜欢使用以下函数作为“包装器”。对于 mysql_real_escape_string()函数。

function someFunction( $value )
{
    if ( is_int( $value ) || is_float( $value ) ) {
        return $value;
    }
    return "'" . mysql_real_escape_string( (string) $value ) . "'";
}

如果值是浮点数或整数,那么运行 mysql_real_escape_string()。我在将值传递给字符串之前将其转换为 mysql_real_escape_string()的原因是因为有时价值可能不是一个字符串。

值不是字符串的示例:

http://localhost/test.php?hello [] = test

在test.php中,你在$ _GET ['hello']上运行 mysql_real_escape_string()你好是一个字符串。好吧,因为人将值设置为数组,它实际上会引起通知,因为你好不是字符串。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top