当输入只是存储在会话cookie中时,我是否需要做一些特殊的事情以保护自己免受来自textarea的用户输入?
我销售的产品可以刻有自定义文字。用户“应该”输入他们想要刻在文本区域中的文本,并且该文本与他们选择的项目一起存储在会话cookie中。其他一些数据。
现在,我在将nl2br存储在会话cookie中之前使用nl2br,然后在我将其显示回页面时使用striplashes。
我是否还需要采取其他措施来保护自己免受恶意代码(即恶意代码等)的侵害?
感谢您的投入(没有双关语!)
答案 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()
,然后将其存储在会话变量中。但是在显示上清理输入如上所述,冥想是一种更强大的思维方式。)