我有以下代碼,以前有人設置了一個新聞簡報註冊系統。PHP新聞快訊singup反向工程師
error_reporting(0);
set_magic_quotes_runtime (0);
if (get_magic_quotes_gpc()) {
foreach($_POST as $k=>$v)
$_POST[$k] = stripslashes($v);
foreach($_COOKIE as $k=>$v)
$_COOKIE[$k] = stripslashes($v);
}
$msg = $_COOKIE['sb'.$_GET['id']];
$email = trim($_GET['email']);
$Ok = ereg("^([a-zA-Z0-9_\.-]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", $email);
$headers = 'From: ' . $email . "\n";
$headers .= 'MIME-Version: 1.0' ."\n";
$headers .= 'Content-Type: text/plain; charset=iso-8859-1' ."\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\n";
if ($Ok && ($msg != '')) {
mail($emailmanager,'Subscribe to Newsletter',$msg,$headers);
Header("Location: $urlok");
} else {
Header("Location: $urlko");
}
php文件被提交表單調用(電子郵件地址,姓名,國家,電話號碼等),其中有這樣的代碼:
error_reporting(0);
set_magic_quotes_runtime (0);
if (get_magic_quotes_gpc()) {
foreach($_POST as $k=>$v)
$_POST[$k] = stripslashes($v);
foreach($_COOKIE as $k=>$v)
$_COOKIE[$k] = stripslashes($v);
}
$msg = '';
foreach($_POST as $k=>$v) {
if (strtolower($k) != "submit" && trim($v) != '')
$msg .= "$k:$v\n";
}
$id = md5($msg);
setcookie("sb$id",$msg,time()+86400,'','',0);
$email = trim($_POST['email']);
它發送電子郵件給誰填的人該表單中有一個鏈接供他們點擊以驗證其電子郵件地址。
當他們點擊鏈接時,會調用第一個php文件(位於頂部),然後將原始表單的存儲詳細信息作爲消息發送到電子郵件地址,因此電子郵件的收件人可以手動輸入這些詳細信息一個數據庫(郵件列表)。
我試圖對其進行反向工程,以便它不會將通知電子郵件發送到郵件列表管理器,而是將詳細信息插入到數據庫中。
我很擅長用php操作數據庫,但上面的代碼有點超出我的意思。
我不確定代碼如何將表單的所有輸入內容的詳細信息打包爲一個ID,存儲直到電子郵件地址被驗證,然後將它們全部放入發送給列表管理器的電子郵件中,但是,在代碼中,任何人都可以看到一種方法來再次提取這些輸入,以便我可以將它們放入一些變量中,準備插入到我的數據庫表中?
任何幫助將不勝感激。 預先感謝您。 乾杯,鋁。
雖然我現在很想知道更多關於它的信息,並且很想發現它是否可以在第二種情況下提取出來,但是您的建議非常有意義,對我來說似乎更實用的方法。 非常感謝您的幫助。 所有這些該死的樹,我新有一個在這裏附近的森林。 Cheers,Al。 (p.s.我會投票給你,但我只有10的聲譽)。 – Almeister9 2013-04-26 14:21:01
沒有問題,沒有太多的答案,但很高興它的幫助。 – 2013-04-26 14:51:34
我會給出答案,因爲您正確地指出,您並不需要做更多的工作,只需要從$ _POST(也可能是$ _COOKIE)中獲取數據。值得指出的是,原始代碼引用底部附近的整個$ msg邏輯只是將所有$ _POST數據填充到一個字符串中,並使用數據本身的MD5散列生成的名稱將其分配給cookie。這就是「持久性」如何在頁面查看之間起作用。 – Peter 2013-04-26 16:07:57