<textarea name="comments" maxlength="1024" rows="6" cols="45" wrap="VIRTUAL" id="field_comments" onblur="CheckField(name, 1, 0)"><?php echo $_POST['comments']; ?></textarea>
PHP预先通过echo输出之前输入到表单中的任何内容......实际上很简单。它工作得很好,因为我的JS和PHP用来剥离任何不是a-zA-Z0-9等等。我的朋友说我应该允许输入任何东西并逃避它。好的,没问题。我逃避了它,但是当我把一个单引号或双引号(测试把奇怪的东西放到字段中)并重新绘制它时 - 它保留了逃脱的东西。例如..我输入
'戴夫',我回来了
\ '戴夫\'
如果我再次点击提交......我得到......
\\'戴夫\\'等等...
我是否可以在表单字段中将其恢复为'Dave',而无需编写自己的自定义函数来执行此操作?或者我必须这样做?
如果你想看看我做的例子,我有一个示例测试页面,显示我正在修改的内容。
http://newmainpcs.perrycs.com/testForm.php
任何帮助都会很棒!我尝试解码它们重新编码它们...我的主要网站是UTF-8 - 这个例子并没有真正显示我的主要网站,但我写了这个小的testForm.php来试图弄明白这一点!大声笑。我可以用HTML或PHP来做。 PHP可能会更容易,因为实际的REAL验证的核心是因为JS可以关闭。如果你愿意,我可以给你一些密码。但是,我相信你会得到我想说的话。
感谢您的帮助!
大卫佩里 PerryCS 佩里计算机服务 (曾经是一个了不起的汇编语言程序员......这就是当你没有17年以上的程序时会发生的事情)。大声笑。坚持简单的事情。答案 0 :(得分:2)
您已激活magic_quotes
,或使用addslashes
逃脱太多。请改用数据库图层的引用功能,即mysqli_escape_string
。
PHP 5.4终于摆脱了魔术引用 - 你也应该做的事情:)
我认为您的问题是您做了太多事情以确保您的应用程序安全。
你基本上只需要:
htmlspecialchars($row_from_database)
通过这种方式,您可以安全地使用SQL注入(#1)和XSS(#2)。
对于那些不关心逃避输入的人来说,魔术引号尝试在#1中进行转义,但这只是半心半意(魔术引用!= db层引用) - 它可以被利用,即使它比没有魔法引号。
如http://www.php.net/manual/en/security.magicquotes.what.php所述,
这与addslashes()相同。
首先,检查get_magic_quotes_gpc()
是否有效。为true表示您的输入已被转义。
然后对您正在使用的输入变量运行stripslashes()
。
答案 1 :(得分:0)
当您将文本输出到HTML流的中间时,您必须小心根据在该HTML流中输出的确切位置对该文本进行编码。
对于在HTML属性中输出的文本,您需要一个编码功能(例如,将"
替换为\"
等)。对于作为HTML元素的文本内容输出的文本,您需要其他编码功能(例如,将<
替换为<
等)。
答案 2 :(得分:0)
要保护SQL中的输入,请使用SQL转义函数,如mysql_real_escape_string。
如果要保护输入不受XSS(在HTML中重新显示),请使用htmlentities()。
另外,请检查您的服务器上是否使用phpinfo()启用了gpc_magic_quotes。如果是这样,请在php.ini文件中禁用它。
答案 3 :(得分:0)
一些基本代码:
session_start();
if (!validated) {
$_SESSION['error'] = $_POST['message'];
} else {
$s = mysql_real_escape_string($_POST['message']);
mysql_query($s);
}
然后在你的HTML中:
<textarea>
<?php
if (!empty($_SESSION['error'])) {
echo htmlspecialchars($_SESSION['error']);
unset($_SESSION['error']);
?>
</textarea>