[英]htmlspecialchars() - How and when to use and avoid multiple use
我正在为老板建立一个PHP内部网。 一个简单的客户,订单,报价系统。 它将被拒绝从Internet访问,并且只能由3个人使用。 我对安全性的关注不如对验证的关注。 在所有计算机上禁用Javascript。
我的问题是这样的:
:;[]"'
等。 我的问题是这样的:
如果员工在步骤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&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:- &
becomes:- &amp;
becomes:- &amp;amp;
你根本是错的。 只是尝试看看
<form>
<input name="a" value="<?=htmlspecialchars($_GET["a"])?>">
<input type=submit>
</form>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.