我在学习上我自己的PHP,我已经意识到用strip_tags()函数。这是保增长的唯一途径?

StackOverflow https://stackoverflow.com/questions/2258808

  •  20-09-2019
  •  | 
  •  

我是新来的PHP和我在这里下面的教程: 链接

这是很可怕的,用户可以在输入写PHP代码,基本上拧你的网站,对吧?

好了,现在我是一个有点偏执,我宁愿学习安全最佳做法马上蝙蝠不是试图填满他们一旦我有一些习惯了我。

由于我全新到PHP(从字面上把它捡起来,前两天),我可以轻松地学习相当多的东西没有得到混淆。

还有什么其他办法,我可以阻止我的网站上的恶作剧? :d

有帮助吗?

解决方案

有几件事情开发PHP应用程序时要记住,只有strip_tags()与那些人帮助。其实strip_tags(),虽然有效,甚至可能做的比需要更多的:用htmlspecialchars()转换可能是危险的人物,甚至应该是preferrable,视情况而定

一般来说,一切都归结为两个简单的规则:过滤所有输入,逃避所有输出现在你需要了解究竟是什么构成的输入和输出。

输出是容易的,你的应用程序发送给浏览器一切都是输出,所以每次使用htmlspecialchars()或任何其他避开功能,你的输出数据,你没有自己写。

输入是在PHP代码中没有硬编码的任何数据:事情通过GET从通过POST一个表单来的,从查询字符串,从饼干,所有的必须在最适当的方式进行过滤依赖您的需要。即使将数据从数据库未来应考虑潜在的危险;尤其是在共享服务器上,你永远不知道如果数据库的方式,可能会影响您的应用程序也别处受到影响。

有不同的方式来过滤数据:白名单仅允许选择的值,基于expcted输入格式等验证。有一件事我从来不建议就是尽量固定数据从用户那里获得。让他们通过你的规则玩,如果你没有得到你所期望的,拒绝请求,而不是试图把它清理干净。

特别注意,如果你处理数据库,必须支付给SQL注入:这类型的攻击依赖于你没有正确构造的查询字符串发送到数据库中,从而使攻击者可以伪造他们试图执行恶意指令。你应该总是使用一个避开功能,如mysql_real_escape_string()或更好,使用具有和mysqli扩展或使用 PDO

还有更多关于这个话题说,但这些点应该让你开始。

HTH

修改:澄清,通过“过滤输入”我的意思是决定什么是好的,什么是不好的,不以任何方式修改输入数据。正如我说我从来没有修改用户数据,除非它是输出到浏览器。

其他提示

用strip_tags是不是真正使用的最好的事情,它不会在所有情况下保护。

HTML纯化: http://htmlpurifier.org/

时的处理输入数据的真正不错的选择,但它本身仍不能满足所有用例 - 但它绝对是一个很好的起点。

我不得不说的是,教程你提到的是一个有点误导有关安全:

  

要注意,你永远不希望直接与$ _GET和$ _ POST值的工作是很重要的。他们一直在值发送到一个局部变量,及与它在那里工作。没有与价值观有关,当你直接访问一些安全隐患(或   输出)$ _GET和$ _POST。

这是无义。的值复制到局部变量不大于直接使用$ _GET或$ _POST变量更加安全。

其实,没有什么固有的不安全性有关的任何数据。重要的是你用它做什么。有几个原因,你可能有一个包含; rm -rf /一个$ _ POST变量完全合法的理由。这是细用于输出一个HTML页面上或存储在数据库中,例如

这是不安全的唯一情况是,当你使用像systemexec的命令。这就是你需要担心你所使用的变量的时间。在这种情况下,你可能想使用类似白名单,或者至少通过escapeshellarg运行值。

类似地与发送的查询的数据库,发送到HTML浏览器,等等。逃出发送数据,它的权利之前在其他地方,使用适当的方法逃避为目标。

用strip_tags除去每一片的HTML。更复杂的解决方案是基于白名单(即允许特定的HTML标签)。了良好的白名单库是htmlpurifyer http://htmlpurifier.org/

和课程对事物的数据库侧的使用像mysql_real_escape_string或pg_escape_string功能

好了,也许我错了,但是......在所有的文学,我读过,人们说这是更好的使用htmlspellchars。

另外,而必要的投输入数据。 (对于int例如,如果你确信它的用户ID)。

好,事先,当你开始使用数据库 - 使用mysql_real_escape_string而不是函数mysql_escape_string防止SQL注入(在一些旧书它写成函数mysql_escape_string仍然)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top