通过$ _POST从第1页到第2页发送登录(电子邮件地址),以便处理jim_o'brien@thing.com等地址。
echo "<input type='hidden' name='login' value='".htmlspecialchars($_GET['login'], ENT_QUOTES)."'>"
查看第2页的源代码,我很高兴看到它按照我的预期输出jim_o'brien@thing.com
而不是jim_o'brien@thing.com
。
当我再次将数据发送到新页面时(第3页),我再次将登录信息包装到htmlspecialchars($_GET['login'], ENT_QUOTES)
中......它完成了我期望它做的事情。
但有人可以解释为什么它会在POST发送中丢失它的#039;
编码吗?我能理解它与浏览器中的单引号相呼应,但为什么它也在源代码中呢?
谢谢
答案 0 :(得分:0)
查看页面的来源,看看它实际上运行正常 - 在浏览器中你会看到“'”,因为你的浏览器让它变得“人性化”,但是在源代码之后你会看到,一切都很好。
以其他方式尝试:
echo htmlentities("jim_o'brien@thing.com", ENT_QUOTES);
答案 1 :(得分:0)
实际上,原始问题是有效的。这是我在大约五分钟内一起攻击的一些代码。它不漂亮,并且不复杂,但它说明了这一点。
<?php
$posted=$_POST[posted];
if (isset($posted)) {
echo "POSTED: $posted<br>"; //output: You'll see a quote
$specposted=preg_replace('/'/','****',$posted);
echo "after entity replace: $specposted<br>"; //output: You'll see a quote
}
else{
$phraseone="You'll see a quote";
$phrasetest=htmlentities($phraseone, ENT_QUOTES);
echo "phrasetest: $phrasetest<br>"; //output: You'll see a quote
$specialphrase=preg_replace('/'/','****',$phrasetest);
echo "after entity replace: $specialphrase<br>"; //output: You****;ll see a quote
print<<<HERE
<form method='post'>
<input type='hidden' name='posted' value='$phrasetest'>
<input type='submit' value='GO!'>
</form>
HERE;
}
?>
...有趣
答案 2 :(得分:-1)
jim_o'brien@thing.com
不是有效的电子邮件地址,不能被允许。
使用filter_input进行验证。
$login = filter_input(INPUT_GET, 'login', FILTER_VALIDATE_EMAIL); //or INPUT_POST, if method is POST
if(!$login){
//invalid e-mail
}