如何在表单输入中阻止HTML?

时间:2011-04-11 16:20:32

标签: php html html-entities

所以,我有一个从HTML表单输入的基本小脚本,是PHP的进程,然后以CSS的形式将其写入文本文件。我已经有一些jerkwad试图在服务器上删除表(没有SQL,但我想让人们不要尝试)这是我到目前为止的代码,有人可以帮助我通过htmlentities或其他东西来阻止潜在的错误输入?

HTML表单

<html><body>
<h4>Codes Form</h4>
<form action="codes.php" method="post"> 

Username: <input name="Username" type="text" />
Usercode: <input name="Usercode" type="text" /> 

<input type="submit" value="Post It!" />
</form>
</body></html>

PHP

    <html><body>
 <?php 

 $Friendcode = $_POST['Usercode'];
 $Username = $_POST['Username'];

echo "You have recorded the following information on the server ". $Username . " " . $Usercode . ".<br />"; echo "Thanks for contributing!";


$output = ".author[href\$=\"$Username\"]:after { \n"
       ."content: \" ($Usercode)\" !important\n"
       ."}";
}
$fp = fopen('file.txt', 'a');
fwrite($fp, $output);
fwrite($fp, "\n");
fclose($fp);
?>


</body></html>

7 个答案:

答案 0 :(得分:2)

您可以使用htmlentities将html标记转换为其html标识。 &LT;或者您可以使用strp_tags来删除所有html标签。如果你使用sql使用mysql_real_escape_string来使sql查询更安全

答案 1 :(得分:2)

每当您在 HTML代码中包含用户输入的数据时,首先对数据进行编码始终是一个好主意,方法是将其传递到htmlspecialchars()

将其视为去污室。这将确保任何HTML特殊字符,例如“&lt;”和“&gt;” (致命的病毒)被正确转义(杀死)并且不会在您的页面中显示为“真正的”HTML标记(不会使您的网页生病)。

同样,在 SQL查询中包含用户输入时,您还必须对其进行编码。您为此目的使用的功能取决于您使用的数据库。由于PHP的动态特性,如果您在SQL查询中包含数值,则必须首先检查以确保变量包含使用is_numeric()ctype_digit()等函数的数字。 / p>

答案 2 :(得分:0)

我认为阻止HTML的最佳方法是只允许您认为用户名或用户代码可能包含的字符。

例如,将输入限制为字母,数字和下划线,并修剪字符串开头和结尾的空格。只要提供HTML代码作为输入,此验证就会失败。

答案 3 :(得分:0)

我建议在客户端和服务器端使用正则表达式执行此操作。可以在此处找到客户端示例:jQuery remove all HTML tags EXCEPT Anchors

答案 4 :(得分:0)

如果有人直接在浏览器中输入code.php的网址,会发生什么情况。他们将获得未定义偏移的通知。

如果$_POST不为空,您至少应该检查一下。

if(isset($_POST['submit']) && !empty($_POST))
{
  //do operation
}

验证特殊字符的用户名和用户代码以及允许他们使用PHP服务器端输入的内容

答案 5 :(得分:0)

@ Zer0mod:我使用strip_tags删除HTML和mysql_real_escape_string来处理任何可能的SQL注入。

答案 6 :(得分:0)

使用PHP将每个符号转换为HTML数字!关于这样做的详细信息,请转到htmlentities()