我正在采取各种措施来防止对我的Web应用程序进行任何类型的注入或攻击。当我关注他们时,我想到一个问题:
防止对您的Web应用程序进行攻击的非常基本的措施之一是防止用户编写可能伤害其他用户的恶意脚本。在我读过的资料中,它指出您应该使用strip_tags()
或htmlentities()
,但在将用户数据插入数据库之前还是在插入数据之前,尚不清楚应该使用它打印出来,或者两者都打印。
因此,基本上我的问题是何时使用这些功能? 还有,如果我想保留一些html标签,该怎么办?{如果我使用的是html文本编辑器},是否建议这样做?
谢谢。
答案 0 :(得分:2)
strip_tags()
用于清理从用户那里收到的数据。它将尝试删除所有NULL字节,HTML和PHP标记。我个人不喜欢此功能,因为有更好的方法可以验证和清除输入,例如filter-input。
如果您想保留一些HTML,可以看看http://htmlpurifier.org/
htmlentities()
用于将数据输出到HTML上下文中。如果您以HTML显示任何内容(与数据的来源无关),则应使用它来防止XSS。 More information
为防止SQL注入,您应该使用参数化的准备好的语句,而不是手动构建查询。它们由PDO或MySQLi提供。如果确保从不将数据和SQL混在一起,则可以将想要插入的任何数据插入DB,甚至可以插入其他SQL。
它们都有不同的用途,并且可以防止不同类型的错误。
答案 1 :(得分:0)
Afik!
strip_tags()被用作一种安全措施,可防止XSS(跨站点脚本)攻击。
在接收要在网站上处理的数据时,应使用它。 通常,在处理站点之间的POST和GET变量时可以使用它。
例如
如果您在 login.php 站点上具有登录表单,则将在其他(或相同)站点上处理该表单的POST或GET操作。
在这些POST或GET变量中,可能存在XSS攻击,例如:
<script>alert('Hi. This is a cyberattack');</script>
您想对 strip_tags()进行操作,是从那些变量中删除不需要的标签。
您可以在自定义函数中允许使用所需的标签,但这取决于您。
希望有帮助!