繁体   English   中英

htmlspecialchars()-如何以及何时使用并避免多次使用

[英]htmlspecialchars() - How and when to use and avoid multiple use

我正在为老板建立一个PHP内部网。 一个简单的客户,订单,报价系统。 它将被拒绝从Internet访问,并且只能由3个人使用。 我对安全性的关注不如对验证的关注。 在所有计算机上禁用Javascript。

我的问题是这样的:

  1. 员工将有效数据输入包含以下任何一种形式的:;[]"'等。
  2. 将此数据形成$ _POSTS到validationAndProcessing.php页面,并确定员工是否在字段中输入了数据。 如果不是,则将其重定向回数据输入页面,而错过的字段将以红色突出显示。
  3. htmlspecialchars()应用于从先前输入的内容重新填充为表单的所有数据。
  4. 如果成功的数据输入到数据库中并且将员工带到显示数据页面,则将表单重新提交到validationAndProcessing.php页面。

我的问题是这样的:

如果员工在步骤1中重复输入任何数据,则每次将htmlspecialchars()应用于数据时,他们将在步骤1和4之间继续移动。

So that:- &
becomes:- &
becomes:- &
becomes:- &

等等..

如何停止将htmlspecialchars()多次应用于已清除的数据?

谢谢亚当

查看htmlspecialchars上手册页

字符串htmlspecialchars(字符串$ string [,int $ quote_style = ENT_COMPAT [,字符串$ charset [, bool $ double_encode = true ]]])

$double_encode选项应该是您想要的。

但是,在正确设置的数据流中,这根本不可能 ,除非从用户或第三方服务传入的数据可能包含或可能不包含HTML编码字符。 (并不是说我在职业生涯中并没有建立一些不正确的数据流。但这就是为什么我知道为什么它如此干净且定义明确如此重要的原因。:-)

您只应在HTML输出中使用htmlspecialchars ,而不能在其他任何地方使用。

<input name="var" value="<?php echo htmlspecialchars($var)?>">

例如,如果$var包含一个&符号,则它将在HTML中输出编码后的值:

<input name="var" value="this&amp;that">

但是,用户只能在其输入字段中看到this&that ,提交后, $_GET['var']将是this&that ,而不是编码版本。

在PHP方面,您唯一想做的就是在魔术引号上加上斜杠:

if (get_magic_quotes_gpc())
    $var = stripslashes($_POST['var']);
else
    $var = $_POST['var'];

从那里应该将原始数据存储在数据库中,而不是HTML编码版本中。 为了避免SQL注入,如果使用的是正常的mysql函数,请使用mysql_real_escape_string ,或者使用PDO代替。

So that:- &
becomes:- &amp;
becomes:- &amp;amp;
becomes:- &amp;amp;amp;

你根本是错的。 只是尝试看看

<form>
<input name="a" value="<?=htmlspecialchars($_GET["a"])?>">
<input type=submit>
</form>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM