我正在尝试制作一个“记住字段”,所以如果有一个错误,您将不必再填写整个表单。但是如何才能使输出安全?
示例:
<input type="text" name="email" value="<?php echo (isset($_POST['email'])) ? htmlspecialchars($_POST['email']) : ''; ?>" />
如果有人输入“'”(不带引号),例如你得到:
Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\wamp\www\pages\register.php on line 55
然后我尝试了:
<input type="text" name="email" value="<?php echo (isset($_POST['email'])) ? mysql_real_escape_string($_POST['email']) : ''; ?>" />
然后它增加了很多//////.
我该怎么办?
我是noob是的。但我认为htmlspecialchars使用户输入安全吗?
答案 0 :(得分:8)
这取决于背景。
htmlspecialchars()
是HTML中的朋友。
mysql_real_escape_string()
是你在MySQL的朋友。
您可以先使用$_POST
通过htmlspecialchars()
运行所有...
$encodedHtmlPost = array_map('htmlspecialchars', $_POST);
答案 1 :(得分:1)
在将数据放入数据库之前必须使用mysql_real_escape_string(),而不是输出!它会阻止SQL注入。在向用户输出数据时使用htmlspecialchars,它可以防止XSS攻击。
在数据库中插入时:
$data = mysql_real_escape_string($data);
mysql_query("INSERT INTO table1(data) VALUES('$data')"); //Safe insertion
输出给用户时:
echo htmlspecialchars($data);
答案 2 :(得分:1)
对于html转义,你应该使用包装函数,因为htmlspecialchars
需要一些参数来产生可靠的安全输出:
htmlspecialchars($text, ENT_QUOTES, "UTF-8");