捕获用户';php联系人表单中的s ip地址

捕获用户';php联系人表单中的s ip地址,php,Php,我正在尝试从php联系人表单中获取用户ip地址,我有以下代码,但我想知道以这种方式使用clean_string向自己发送ip地址是否有效 <?php session_start(); if(isset($_POST['fullname'])) { include 'freecontact2formsettings.php'; function died($error) { echo "Sorry, but there were error(s) found with

我正在尝试从php联系人表单中获取用户ip地址,我有以下代码,但我想知道以这种方式使用clean_string向自己发送ip地址是否有效

<?php

session_start();




if(isset($_POST['fullname'])) {

include 'freecontact2formsettings.php';

function died($error) {
    echo "Sorry, but there were error(s) found with the form you submitted. ";
    echo "These errors appear below.<br /><br />";
    echo $error."<br /><br />";
    echo "Please go back and fix these errors.<br /><br />";
    die();
}

if(!isset($_POST['fullname']) ||
    !isset($_POST['Address1']) ||
    !isset($_POST['city']) ||   
    !isset($_POST['Postcode']) ||
    !isset($_POST['contactnum']) ||
    !isset($_POST['emailaddress'])







    ) {
    died('Sorry, there appears to be a problem with your form submission.');        
}
$ip = $_SERVER['HTTP_CLIENT_IP']; 
$ansb0_from = $_POST['fullname']; // required
$ansb1_from = $_POST['Address1']; // required
$ansb3_from = $_POST['city']; // required   
$ansb4_from = $_POST['Postcode']; // required
$ansb5_from = $_POST['contactnum']; // required
$ansb6_from = $_POST['emailaddress']; // required


$error_message = "";


$email_message = "PHP CONTACT FORM:\r\n";

function clean_string($string) {
  $bad = array("content-type","bcc:","to:","cc:");
  return str_replace($bad,"",$string);
}


$email_message .= "Forename: ".clean_string($ansb0_from)."\r\n";
$email_message .= "Address 1: ".clean_string($ansb1_from)."\r\n";
$email_message .= "City: ".clean_string($ansb3_from)."\r\n";
$email_message .= "Postcode: ".clean_string($ansb4_from)."\r\n";
$email_message .= "Contact Number: ".clean_string($ansb5_from)."\r\n";
$email_message .= "Email Address: ".clean_string($ansb6_from)."\r\n";
$email_message .="IP Address: ".clean_string($ip)."\n\n"; 











$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($email_to, $email_subject, $email_message, $headers);
header("Location: $thankyou");
?>
<script>location.replace('<?php echo $thankyou;?>')</script>
<?php
}
die();
?>

是在联系人表单脚本页面上,而不是用户输入信息的实际form.php,我想这就是我出错的地方,对吗?

您不希望表单本身包含IP。这样就可以显示、编辑和处理它。相反,只需使用以下方法在服务器端捕获它:

$\u服务器['REMOTE\u ADDR']


顺便说一句,谷歌搜索这个问题应该会返回5亿个都有效的结果。只是一个快速提醒。

您想同时检查
$\u服务器[“远程地址”]
$\u服务器[“HTTP\u X\u FORWARDED\u for”]
,因为如果用户在代理服务器后面,后者可能是必需的


您可以在此处阅读更多内容:

使用此$\u服务器['REMOTE\u ADDR'];旁注-在
clean\u string()
函数中使用
str\u ireplace()
而不是
str\u replace()
,以进行不区分大小写的匹配。但是,+1是因为认识到电子邮件注入,这里几乎没有人会这么做……除非是
X\u FORWARDED\u for
。看一看phpBB的源代码,找到他们是如何获得用户IP的(并检查代理等)。@BradChristie:我现在仔细看了代码,你说得对。这个标题让我有点困惑。如果他使用了正确的服务器,那么他的方法是正确的。除非您知道是谁设置了代理,否则他永远不会依赖任何转发给头的代理。任何用户都可以在其请求中包含此头并欺骗其IP。
$ip = $_SERVER['HTTP_CLIENT_IP'];