所以我有一个包含客户端和服务器端验证的表单,但服务器端更重要,因为我们有像csrf保护这样的东西。表格必须首先来到我们的服务器,然后前往第二台服务器。
我需要能够将表单提交到我的服务器,运行我的验证,然后如果通过,则将整个表单发送到另一个页面。 - 我的意思是表单的action属性,所有字段,所有内容。它应该表现为表单的原始操作是重定向域。
这可能是curl,或者我可以从原始值动态创建一个新表单,并使用POST标题将其发送到另一个域吗?
应该提到:我没有访问其他服务器,它是第三方。
答案 0 :(得分:0)
您可以在同一页面中进行验证,然后将其插入数据库并将当前页面重定向到另一页并检索数据,例如:
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');
}
}
}
答案 1 :(得分:-1)
您可以使用其他页面上的Cookie或会话传递变量并使用它们。
假设您的表单名称是
FIRST_FORM_VALIDATE
,这是在FIRST_FORM_PAGE
页上。
现在在FIRST_FORM_PAGE
上获取用户输入,并使用POST方法将此数据发送到FIRST_FORM_VALIDATE
。如果数据正确,您可以在服务器上验证数据,将所有输入存储在会话变量中,如下所示 -
session_start();
$_SESSION['form_input1']=$_POST['form_input1'];
依此类推,存储所有变量。现在,您可以在另一个页面上使用这些变量来验证这些变量。完成验证后,销毁会话变量。
编辑 - 如果您要将数据发送到另一台服务器并希望阻止CSRF,那么最好的方法是将这些数据存储在临时数据库中,然后使用远程数据库连接在另一台服务器上访问它。