防止用户textarea输入

时间:2012-03-19 18:31:26

标签: php html forms session cookies

当输入只是存储在会话cookie中时,我是否需要做一些特殊的事情以保护自己免受来自textarea的用户输入?

我销售的产品可以刻有自定义文字。用户“应该”输入他们想要刻在文本区域中的文本,并且该文本与他们选择的项目一起存储在会话cookie中。其他一些数据。

现在,我在将nl2br存储在会话cookie中之前使用nl2br,然后在我将其显示回页面时使用striplashes。

我是否还需要采取其他措施来保护自己免受恶意代码(即恶意代码等)的侵害?

感谢您的投入(没有双关语!)

3 个答案:

答案 0 :(得分:4)

如果您只想允许某些字符(例如a-z 0-9),请验证输入。如果您不想要<>等字符,请验证。

作为一般经验法则,请在输入时存储输入,并在将输入打印到页面或其他介质之前进行任何处理。通过处理,我的意思是通过nl2br()htmlentities()运行它。

通常最好以中性形式存储数据,即不为HTML等处理数据,因为您可能希望将来将数据输出到其他形式,例如XML,Web服务,在这种情况下它将会需要以不同的方式处理。

将其存储在会话变量中,而不是cookie中。会话变量存储在服务器上,浏览器或其他任何人都无法访问。如果将它存储在cookie中,它可能会被篡改,并且每次要访问它时都必须重新验证输入,因为它可能已经更改。

如果最终将数据存储在数据库中,则需要将其转义为SQL注入。其方法取决于使用哪个库与数据库连接,但参数化查询或预处理语句更可取。

答案 1 :(得分:2)

第一个最明显的攻击机会是直接HTML输入。想象一下有人在你的文本区输入<script src="http://malicious.com/ddos.js" />。您的PHP代码是否会以使其运行.js代码的方式输出?

其次,数据是如何进入雕刻机的?最常见的是它存储在数据库中供以后使用,或者通过电子邮件发送到雕刻机的工作队列。

如果您要放入数据库,则需要查看可以处理清理输入的PDO之类的包装器。

如果您是通过电子邮件发送给自己或其他人,那么您需要注意避免在其中放置危险信息。我相信php的mail()函数会自动保持$message不对标题进行更改。 http://www.php.net/manual/en/function.mail.php

如果您有其他方法,请告诉我们,可能还有其他问题。

答案 2 :(得分:1)

在textarea框中显示变量之前,您应该运行htmlspecialchars()

这将确保可能的恶意HTML代码安全地显示在textarea中而不是被执行。

您显示变量的所有其他位置,例如。在电子邮件或管理界面中,您也应该在其上运行htmlspecialchars()

模拟地,还记得在保存到数据库时转义变量,这样人们就无法搞乱数据库查询。

(在显示时执行htmlspecialchars()的另一种方法是在用户的输入中运行strip_tags(),然后将其存储在会话变量中。但是在显示上清理输入如上所述,冥想是一种更强大的思维方式。)