我是使用 PHP 创建网站的新手,最近我从一位朋友那里得到一个提示,如果我逃避了从表单输入的所有数据,那么我的网站将不太容易受到 HTMLi 和 SQLi 攻击。比如说:
$_POST['name'] is equal to "<h1>You could have prevented this</h1>"
将会发生的事情是在我的网站上它会显得非常大,这根本不好。我希望它显示为
<h1>blabla</h1>
不是
废话
有一个简单的功能吗?
我是使用 PHP 创建网站的新手,最近我从一位朋友那里得到一个提示,如果我逃避了从表单输入的所有数据,那么我的网站将不太容易受到 HTMLi 和 SQLi 攻击。比如说:
$_POST['name'] is equal to "<h1>You could have prevented this</h1>"
将会发生的事情是在我的网站上它会显得非常大,这根本不好。我希望它显示为
<h1>blabla</h1>
不是
有一个简单的功能吗?
这取决于您将数据放在哪里。
如果您要将其回显到 HTML 页面中,请使用类似htmlentities()
.
如果您将其放入 SQL 字符串中,请使用mysqli_escape_string()
和/或使用参数化查询(mysqli
“准备”或 PDO)。
如果您将其回显到页面上的 JavaScript 片段中,请使用类似json_encode()
.
关键是你需要为你正在做的事情使用正确的转义函数。
当您将用户输入输出到页面上时使用htmlentities()
或htmlspecialchars()
。这可以防止 XSS。
为了防止 SQL 注入,您应该使用准备好的语句(例如使用 PDO 或 MySQLi),而不是转义。转义是防止 SQLi 的一种原始方法,它并不总是 100% 安全,不像准备好的语句(如果使用得当)。
SQLi 和 XSS 是不同的问题,应该分开解决。没有一种万能的解决方案来防止所有类型的漏洞。每种类型的漏洞都应单独解决。
您的“提示”毫无意义,因为 HTML 和 SQL 攻击是不同的东西。但是,如果您想避免显示问题,请使用htmlspecialchars()
或htmlentities()
转义此类数据。如果您想处理 SQLInjection,请使用mysqli_escape_string()
或等效(PDO 自动转义)