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