0

这里我要问几个问题,首先,您是否填写表格是否重要:

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

代替:

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

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

下一个问题是表单验证,我被告知如果它不是来自数据库,不要打扰服务器端验证,只打扰客户端验证......这似乎有点奇怪,不打扰服务器端验证,我感觉无论是否有数据库,我都应该拥有两者。

4

3 回答 3

0

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

action但是,将属性留空也可以达到相同的效果。表单将提交给自己。我个人认为这样比较好。如果使用$_SERVER['PHP_SELF'],攻击者很容易通过附加file.phpURL 的一部分来注入恶意代码。将action属性留空可以防止这种情况发生。

来到你的第二个问题,

我被告知如果它不是来自数据库,不要打扰服务器端验证,只打扰客户端验证

不,这是反过来的。来自数据库的值通常是安全的,因为是您将它们插入到数据库中。另一方面,用户输入应该被信任,它们应该被正确验证。

于 2013-08-07T13:15:07.343 回答
0

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

如果它不是来自数据库,则不要为服务器端验证而烦恼,而只为客户端验证而烦恼

这是相反的方式。数据库中的值是安全的,用户输入永远不安全。

于 2013-08-07T13:13:30.390 回答
0

,我被告知如果它不是来自数据库,不要打扰服务器端验证,只打扰客户端验证..

错误的!在客户端所做的一切都是潜在的危险。通过禁用 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>

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

于 2013-08-07T13:14:28.833 回答