php安全输出

时间:2011-02-12 00:07:38

标签: php

我正在尝试制作一个“记住字段”,所以如果有一个错误,您将不必再填写整个表单。但是如何才能使输出安全?

示例:

<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使用户输入安全吗?

3 个答案:

答案 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");