-4

我是使用 PHP 创建网站的新手,最近我从一位朋友那里得到一个提示,如果我逃避了从表单输入的所有数据,那么我的网站将不太容易受到 HTMLi 和 SQLi 攻击。比如说:

$_POST['name'] is equal to "<h1>You could have prevented this</h1>"

将会发生的事情是在我的网站上它会显得非常大,这根本不好。我希望它显示为

<h1>blabla</h1>

不是

废话

有一个简单的功能吗?

4

3 回答 3

4

这取决于您将数据放在哪里。

如果您要将其回显到 HTML 页面中,请使用类似htmlentities().

如果您将其放入 SQL 字符串中,请使用mysqli_escape_string()和/或使用参数化查询(mysqli“准备”或 PDO)。

如果您将其回显到页面上的 JavaScript 片段中,请使用类似json_encode().

关键是你需要为你正在做的事情使用正确的转义函数

于 2012-12-24T15:30:23.400 回答
1

当您将用户输入输出到页面上时使用htmlentities()htmlspecialchars()。这可以防止 XSS。

为了防止 SQL 注入,您应该使用准备好的语句(例如使用 PDO 或 MySQLi),而不是转义。转义是防止 SQLi 的一种原始方法,它并不总是 100% 安全,不像准备好的语句(如果使用得当)。

SQLi 和 XSS 是不同的问题,应该分开解决。没有一种万能的解决方案来防止所有类型的漏洞。每种类型的漏洞都应单独解决。

于 2012-12-24T15:29:29.470 回答
0

您的“提示”毫无意义,因为 HTML 和 SQL 攻击是不同的东西。但是,如果您想避免显示问题,请使用htmlspecialchars()htmlentities()转义此类数据。如果您想处理 SQLInjection,请使用mysqli_escape_string()或等效(PDO 自动转义)

于 2012-12-24T15:30:37.383 回答