所以我有一个同时包含客户端和服务器端验证的表单,但服务器端更重要,因为我们有 csrf 保护之类的东西。表格必须首先到达我们的服务器,然后前往第二台服务器。
我需要能够将表单提交到我的服务器,运行我的验证,然后如果通过,则将整个表单发送到另一个页面。 -- 我的意思是表单的 action 属性,所有字段,所有内容。它的行为应该像表单的原始操作是重定向的域一样。
这是否可能使用 curl,或者我可以从原始值动态创建一个新表单,并使用 POST 标头将其发送到另一个域?
应该提到:我无法访问其他服务器,它是第三方。
您可以在同一页面中进行验证,然后将其插入数据库,并将当前页面重定向到另一个页面并检索数据,例如:
if(isset($_POST)){
// here you assign variables to the post values like:
$name = $_POST['name'];
//then you run your validation from the database
// assuming $con to be your db connection variable
$query = mysqli_query($con, "SELECT * FROM table WHERE (blah blah blah)");
if(mysqli_num_row ==1){
if(mysqli_query($con, " INSERT INTO table VALUES(blah blah blah)")){
//then you use the header to redirect the page to the next page
header(location: 'path/to/page');
}
}
}
您可以使用其他页面上的 cookie 或会话传递变量并使用它们。假设您的表单名称是 FIRST_FORM_VALIDATE
,这是在某个页面上FIRST_FORM_PAGE
.
现在,在FIRST_FORM_PAGE
上获取用户输入,并使用POST方法将此数据发送到FIRST_FORM_VALIDATE
。在这里,您可以在服务器上验证数据是否正确,将所有输入存储在会话变量中,如下所示-
session_start();
$_SESSION['form_input1']=$_POST['form_input1'];
依此类推,存储所有变量。现在,您可以在要验证这些变量的任何位置在另一个页面上使用这些变量。完成验证后,销毁会话变量。
编辑 - 如果您要将数据发送到另一台服务器并希望阻止CSRF,那么最好的方法是将这些全部存储在临时数据库中,然后使用远程数据库连接在另一台服务器上访问它。