Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 针对用户文本区域输入的保护_Php_Html_Forms_Session_Cookies - Fatal编程技术网

Php 针对用户文本区域输入的保护

Php 针对用户文本区域输入的保护,php,html,forms,session,cookies,Php,Html,Forms,Session,Cookies,当输入仅仅存储在会话cookie中时,我是否需要做一些特殊的事情来保护自己不受来自文本区域的用户输入的影响 我卖的产品可以刻上自定义文字。用户“应该”输入他们想要刻在文本区域的文本,该文本与他们选择的项目&一些其他数据一起存储在会话cookie中 现在,我在将nl2br存储到会话cookie之前使用它,然后在将其显示回页面时使用斜杠 我是否需要做任何其他事情来保护自己免受恶意代码(如htmlentities等)的攻击 感谢您的输入(没有双关语!)第一个最明显的攻击机会是直接的HTML输入。想象有

当输入仅仅存储在会话cookie中时,我是否需要做一些特殊的事情来保护自己不受来自文本区域的用户输入的影响

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

现在,我在将nl2br存储到会话cookie之前使用它,然后在将其显示回页面时使用斜杠

我是否需要做任何其他事情来保护自己免受恶意代码(如htmlentities等)的攻击


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

第一个最明显的攻击机会是直接的HTML输入。想象有人将
输入到您的文本区域。您的PHP代码会以运行.js代码的方式输出它吗

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

如果要将数据放入数据库中,则需要研究一个类似PDO的包装器,它可以处理清理输入

如果你通过电子邮件发送给自己或其他人,那么你需要小心避免将危险信息放在那里。我相信php的mail()函数将自动防止
$message
更改标题


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

在文本区域框中显示变量之前,您应该运行
htmlspecialchars()

这将确保可能有害的HTML代码安全地显示在文本区域中,而不是被执行

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

同时,如果保存到数据库,也要记住转义变量,这样人们就不会干扰数据库查询


(显示时执行
htmlspecialchars()
的另一种方法是在用户输入存储在会话变量中之前对其运行
strip\u tags()
。但是,如上所述,在显示时对输入进行消毒是一种更稳健的思维方式,IMHO。)

如果您只想允许某些字符,如a-z 0-9,请验证输入。如果您不需要像
这样的字符,请验证

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

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

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


如果最终将数据存储在数据库中,则需要将其转义为SQL注入。根据使用哪个库与数据库接口,这种方法会有所不同,但参数化查询或准备好的语句更可取。

只要您没有遇到问题,为什么要问?你知道你在做什么,不是吗?它是有效的,我只是不知道我是否会让自己受到任何黑客攻击,等等。你怎么可能?如果你将某些字符串传递给雕刻机,它可能会出现安全问题。您使用的是哪种模型?以中性形式存储数据意味着每个显示数据的人都必须a)意识到数据可能是恶意的,b)每次都要确保安全。但我以前处理过HTML处理的数据,我认为你是对的。