php – 有效地清理用户输入的文本
我有一个html表单,接受用户输入的大小约为1000的文本,并提交到一个php页面,它将存储在
mysql数据库中.我使用PDO与预准备语句来防止SQL注入.但要清理用户输入的文本,需要做的最好的努力是什么?
我想阻止任何脚本注入,xss攻击等.
安全是一个有趣的概念,吸引了很多人.不幸的是,这是一个复杂的主题,甚至专业人士都错了.我发现谷歌(CSRF),Facebook(更多CSRF),几家主要在线零售商(主要是SQL注入/ XSS)以及成千上万的小型企业和个人网站都存在安全漏洞.
这些是我的建议: 1)使用参数化查询 SELECT * FROM users WHERE userID = $_GET['userid'] 如果$_GET [‘userid’]设置为1或1 = 1,则没有特殊字符,也不会对其进行过滤.这会导致返回所有行.或者,更糟糕的是,如果将其设置为1或is_admin = 1,该怎么办? 参数化查询可防止发生此类注入. 2)验证您的输入 例如,您可能有一个密码更改表单,该表单将POST请求发送到更改其密码的脚本.如果您将其用户ID作为隐藏变量放在表单中,他们可以更改它.发送id = 123而不是id = 321可能意味着他们更改别人的密码.确保在类型,范围和访问方面正确验证了一切. 3)使用htmlspecialchars来转义显示的用户输入 4)不要使用$_REQUEST 假设用户想要向某人发送私人消息.他们可能会向sendmessage.php发送POST请求,其中包含to,subject和message作为参数.现在让我们假设某人发送了一个GET请求: sendmessage.php?to=someone&subject=SPAM&message=VIAGRA! 如果你使用$_POST,你将看不到任何这些参数,因为它们是在$_GET中设置的.您的代码将看不到$_POST [‘to’]或任何其他变量,因此它不会发送消息.但是,如果您使用$_REQUEST,则$_GET和$_POST会粘在一起,因此攻击者可以将这些参数设置为URL的一部分.当用户访问该URL时,他们无意中发送了该消息.真正令人担忧的部分是用户不必做任何事情.如果攻击者创建了恶意页面,则它可能包含指向URL的iframe.例: <iframe src="http://yoursite.com/sendmessage.php?to=someone&subject=SPAM&message=VIAGRA!"> </iframe> 这导致用户在没有意识到他们做任何事情的情况下向人们发送消息.因此,您应该避免使用$_REQUEST并使用$_POST和$_GET. 5)将您给予的所有内容视为可疑(甚至恶意) 如果您遵循这些准则,那么您在安全性方面具有合理的地位. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |