mysql准备的语句&;html净化器情侣概念


mysql prepared statements & html purifier couple concept



我的网站正处于原型阶段。在我在这个网站上问了这个问题之后,经过额外的阅读,我得出了使用mysql prepared statements的结论

用我的新思维方式,我想确保我正确理解了事情,所以我的两个问题是:

  1. 如果在不受信任的数据插入期间使用准备好的语句mysql,I不需要使用mysqli_real_escape_string function。我是吗正确的

  2. 如果我在获取&显示来自的数据mysqldb屏蔽为html,(出于安全原因)会更好使用html净化器类,所以我应该使用html净化器类。我说得对吗?

    你能告诉我我的思维方式吗?我的方法有意义吗

    谢谢,br

如果在将不受信任的数据插入mysql的过程中使用prepared语句,则不需要使用mysqli_real_escape_string函数。我说得对吗?

你说得对。准备好的语句有自己的转义程序。

如果我在获取&将mysqldb中的数据显示为html,(出于安全原因)最好使用html净化器类,所以我应该使用html净化器。我说得对吗?

你也是对的。当你打印html时,你必须确保它是安全的,所以有两种解决方案:激进的解决方案:用htmlspecialchars逃离everithing,或者更温和的解决方案,允许使用安全的html标签:使用htmlpurifier

我还想让你向你介绍一条规则,这条规则会让你进入一个安全、更舒适的网站:过滤入逃离。

prepared语句和htmlpurifier是用来"转义"的,这意味着您将以输出可以理解的方式发送数据。

rull中的过滤器使您能够研究用户输入的内容。一个很好的例子是日期格式。也许你想让他们输入一个英文格式Y-m-d的日期。如果他们不这样做,你的网站将无法工作,所以你必须要求他们以正确的方式再次输入日期。关于过滤,有一种方法需要记住:filter_var

是的,确实如此
mysqli_real_escape_string函数无论如何都与任何保护无关
html净化器是一件好事,但如果用户输入中没有html,您可以用懒惰的htmlspecialchars()函数调用来代替它。

关于准备好的语句,唯一需要提及的是:它们只涵盖基本标量值,而对标识符(表和字段名)或数组等复杂值无能为力。

如果在将不受信任的数据插入mysql的过程中使用prepared语句,则不需要使用mysqli_real_escape_string函数。我说得对吗?

纠正

如果我在获取&将mysqldb中的数据显示为html,(出于安全原因)最好使用html净化器类,所以我应该使用html净化器。我说得对吗?

使用准备好的语句可以保护数据库不受SQL注入的影响。它对XSS攻击没有任何作用。你需要一些防御措施。

由于"保护数据库"answers"保护HTML"是完全独立的问题,因此一方的解决方案选择与另一方的方案选择无关。

使用基于白名单的过滤器构建在一个真正的HTML解析器周围(我认为HTML净化器就是其中之一)是一个明智的选择(如果你想允许一些HTML)。

1)如果您使用准备好的语句插入数据,则不需要对其中的引号和其他特殊字符进行转义。基本上,您可以防止SQL注入。但是,您仍然需要对数据进行净化,使其不包含XSS攻击。当你正在研究HTML净化器时,你正处于正确的轨道上。此外,您需要编写业务逻辑代码来验证您的数据,以确保它确实是您所期望的(类型检查、范围检查等)

2) 理论上,在向用户显示数据之前应该对数据进行净化,HTML净化器可以完成这项任务。然而,在实践中,您会注意到HTML净化器是一个相当重的库,因此不适合每次显示数据时使用。一个性能更好的解决方案是在数据插入数据库之前对其运行HTML净化器,然后在没有额外验证的情况下显示它。您本质上是在努力确保您的数据库是干净的,因为如果数据库是干净,那么来自那里的任何东西都肯定是干净的。这也是一个很好的安全方法。

您的验证程序应该类似于:

if( ! isValid( $rawData ) ) {
    return;
}
$purifiedData = htmlPurifier( $rawData );
mysql_prepared_insert( $purifiedData );

当然,这只是一种方法。有很多方法可以实现良好的安全性和数据净化。此外,了解为什么要使用HTML净化器也是很重要的。当您希望允许用户发布某些HTML标记,但不是全部时,应该使用它。如果您想阻止所有HTML,那么htmlspecialchars函数将以一种更有效的方式完成任务。当你有一个标签白名单,你想允许并阻止其他一切时,HTML净化器是很好的。您还可以使用它来剥离所有标记,而不是转义它们,因此使文本看起来比经过htmlspecialchars后稍微好一些。