2013-01-04 64 views
0

UPDATE:下面的代码被认为是如下涉及@JanDvorak @ MrCode讨论安全的代码,而我就在MrCode答案的评论:)下面的php代码是否有涉及安全风险?

page1.php中

<form method="post" action="page2.php"> 
<textarea name="tryit" cols="!20" rows="10"></textarea> 
</form> 

页2.PHP

<?php 
echo filter_input(INPUT_POST, 'tryit', FILTER_SANITIZE_SPECIAL_CHARS); 
?> 

我只是不想让任何用户执行任何系统代码或调用任何系统函数。

感谢

+1

可能更适合[codereview.stackexchange.com](http://codereview.stackexchange.com/)... – War10ck

回答

1

的代码在XSS方面的安全,因为filter_input()FILTER_SANITIZE_SPECIAL_CHARS标志编码的HTML特殊字符,防止XSS漏洞。

Manual

FILTER_SANITIZE_SPECIAL_CHARS
HTML逃逸“” <> &并用ASCII值字符小于32,任选地剥离或编码其他特殊字符

。它与以下内容相同:

echo htmlspecialchars($_POST['tryit']); 

如果您将代码移动到另一个上下文中,例如移入SQL查询中,则它不再安全。特殊字符编码特定于防止XSS。

+0

IT不会允许任何系统调用执行正确吗?例如'ls'或exec(“ls”);类似的东西.. – UserHex

+1

没有系统调用可以用该代码执行。即使没有过滤器,系统调用也不能执行(只有Javascript)。 – MrCode

+0

根据XSS *的上下文,它是安全的。 – Gumbo

0

使用htmlspecialchars,这将替换所有特殊的html字符:& ' " < >&amp; &#039; &quot; &lt; &gt;,之后它们将显示为正常字符。

+0

使用filter_input比我更喜欢htmlspecialchars?if我错了,请告诉我正确的答案? – UserHex

0

此代码片段不会执行操作系统或任何shell命令的任何功能。

filter_input也不会执行任何系统功能。

page2将仅显示POST收到的任何文本。

存储在$_POST['tryit']中的值不会受到影响。当您再次访问该变量时(或将其HTML转义版本存储在某处),您需要分别对其进行清理。

filter_input不常用。您可以使用特定的转义函数。