php中的转义输入

php中的转义输入,php,input,escaping,Php,Input,Escaping,我写了一个代码。。但是现在我不知道哪个版本更好。。有没有可能因为第1版我的代码易受攻击 第1版: $destination = $_POST['var']; $destination = strip_tags(trim($destination)); 第2版: $destination = strip_tags(trim($_POST['var'])); 由于strip\u标签和trim都不会更改输入字符串,因此两个版本之间绝对没有差异。。它们完全相同。 您转义输入的目的是什么?数据库XSS

我写了一个代码。。但是现在我不知道哪个版本更好。。有没有可能因为第1版我的代码易受攻击

第1版:

$destination = $_POST['var'];
$destination = strip_tags(trim($destination));
第2版:

$destination = strip_tags(trim($_POST['var']));

由于
strip\u标签
trim
都不会更改输入字符串,因此两个版本之间绝对没有差异。。

它们完全相同。

您转义输入的目的是什么?数据库XSS?

两个代码段完全相同。有些人会说第一个更易于阅读,有些人会说第二个更简洁

这两个版本的含义相同,您可以使用任何版本。在我看来,您必须使用,来过滤输入字符串…

那么,strip\u标记仍然可以被利用。稍微好一点的解决方案可能是:

$destination = htmlentities(trim($_POST['var']));
但是,这仍然不够,如果$\u POST['var']将进入数据库,则需要做额外的工作


在生产级别的代码中实现htmlentities()之前,请确保您完全了解htmlentities()的功能。

这两个版本在漏洞方面是相同的。如果您担心的是注入,那么可能需要包括addslashes()


哪个更好?第2版实际上会更快地进行基准测试。将一个变量设置为另一个变量只是过程中不必要的步骤。我认为第1版虽然在技术上没有错,但却是一种糟糕的做法。即使结果是相同的。

另一方面注意:个人而言,我会在
strip_tags
之后进行
trim
,因为在从已修剪的字符串中删除标记后,可能仍然会在两侧出现空白(例如,对于

。这一点很好。但我认为它对我来说会很好。谢谢!我希望这个转义不是针对数据库的…我曾经读过一篇关于这个主题的文章…有人说,如果它将填充“etc”,并且我也使用mysql\u real\u ecape\u字符串,它可能会损坏数据库。它不会”损坏数据库”,但
htmlentities()
与输入完全无关;它只对转义输出有用。我建议使用htmlenties()的原因是当从数据库输出输入时..strip_tags()在这种情况下,将无法防止XSS或其他漏洞。@Link-这没有意义。输入不是通过
$\u POST
从数据库来的。转义HTML实体很重要,但不是对进入数据库的数据。它应该只对来自数据库的数据进行转义,然后再通过ST离开应用程序DOUT.@meagar:首先,htmlentities()用作多用途输入过滤。它不仅有助于过滤XSS,还降低了sql注入的风险。其次,在输出离开数据库后过滤输出仍然会产生代码不安全性(比如日志中毒等).在离开应用程序时过滤输出也不实用!想象一下在不同区域输出数据,你必须过滤所有数据?!这不是一个很好的做法,是吗?!