表单提交问题


Issues with form submission

这里我必须问几个问题,首先,你是否在表单中输入是否重要

<form action="whatever.php" method="post">

而不是:

<form name="" action="$_SERVER['PHP_SELF']" method="post">

我的意思是,我只是列出了whatever.php,因为它分解了我的代码,而不是有大量的代码文件,我只是传递带有会话变量的错误消息等,然后立即销毁它们。我只是好奇它的优点或缺点是什么,我是否可以做得更好?

下一个问题是表单验证,有人告诉我,如果它不是来自数据库,就不要麻烦服务器端验证,只麻烦客户端验证。。。这似乎有点奇怪,不需要服务器端验证,我觉得无论是否有数据库,我都应该同时拥有这两者。

表单中的操作实际上并不重要。如果您使用带有路由器的框架,URL不会直接映射到PHP文件。代码的位置不应该由URL决定,但这是当您进入更高级的代码体系结构时。

如果它不是来自数据库,请不要麻烦服务器端验证,只麻烦客户端验证

相反。数据库中的值为安全,用户输入为never安全。

,有人告诉我,如果它不是来自数据库,不要麻烦服务器端验证,而只关心客户端验证。。

错了在客户端所做的一切都有潜在的危险。通过禁用javascript或vbscript(或其他),用户可以绕过任何验证。始终在服务器端进行验证!还可以考虑Chrome&Firefox网络开发工具,任何HTML代码都可以随时更改。

在表单中,省略动作参数或留空(稍后更好,否则W3C验证失败)将告诉浏览器将输入发送到相同的文件

考虑以下示例

<?php
if(isset($_POST['submit']))
{
    echo $_POST['text'];
}
?>
<hr>
<form action="" method="POST">
    <input type="text" name="text">
    <input type="submit" value="susbmit">
</form>

该脚本将在表单提交上回显传递给它的内容

如果在表单中使用$_SERVER['PHP_SELF'],action属性将默认为当前URL。这是一种告诉PHP将表单提交到其来源地的方法。

但是,将action属性保留为空也可以获得相同的效果。表格将自行提交。我个人认为这样更好。如果使用$_SERVER['PHP_SELF'],攻击者很容易通过附加URL的file.php部分来注入恶意代码。将action属性留空可以防止这种情况发生。

说到你的第二个问题,

有人告诉我,如果它不是来自数据库,不要麻烦服务器端验证,只麻烦客户端验证

不,正好相反。数据库中的值通常是安全的,因为是您将它们插入到数据库中。另一方面,用户输入应而不是可信,并且应正确验证。