ציטוט:
נכתב במקור על ידי nitsanbn
אין קשר לRECAPTCHA
הוא מתכוון שיעשו לו SUBMIT לטופס מבחוץ.. סוג של X/CSRF
תעבוד עם TOKEN-ים
תחזיק איזה MD5 של משהו ייחודי בסשן, תזרוק אותו בטופס בתור ערך מוסתר ותשווה ביניהם בבדיקה
|
כאשר הטופס באותו עמוד של הכנסת הנתונים למסד, זה קשור בהחלט.
אתה מכניס את הRECHAPTA כתנאי להכנסת נתונים למסד,
כמו פה:
קוד:
<?php
include("config.php") ;
include("dblib.php") ;
include("sessions.php") ;
require_once('recaptchalib.php');
$publickey = "****blabla*****";
$privatekey = "****blabla*****";
# the response from reCAPTCHA
$resp = null;
# the error code from reCAPTCHA, if any
$error = null;
# was there a reCAPTCHA response?
$bool_is_login = false ;
if($session[user_id] > 0) {
$bool_is_login = true ;
}
if(!$bool_is_login) {
if($_POST['a'] == "register") {
$userdata = $_POST['userdata'] ;
$userdata[username] = htmlspecialchars(trim($userdata['username'])) ;
$userdata[email] = htmlspecialchars(trim($userdata['email'])) ;
$userdata[f_name] = htmlspecialchars(trim($userdata['f_name'])) ;
$userdata[l_name] = htmlspecialchars(trim($userdata['l_name'])) ;
$userdata[phone] = htmlspecialchars(trim($userdata['phone'])) ;
$bool_register = false ;
if(empty($userdata[username])) {
$message = "Username is empty" ;
}elseif(is_username_exists($userdata[username])) {
$message = "Username is already exist" ;
}elseif(empty($userdata[password])) {
$message = "Password is empty" ;
}elseif(empty($userdata[address])) {
$message = "Address is empty" ;
}elseif(empty($userdata[company])) {
$message = "Company name is empty" ;
}elseif($userdata[password] != $userdata[c_password]) {
$message = "Passwords are not equal" ;
}elseif(empty($userdata[email])){
$message = "E-Mail is empty" ;
}elseif(!check_email_address($userdata[email])){
$message = "E-Mail is not vaild." ;
}elseif(empty($userdata[f_name])){
$message = "First name is empty" ;
}elseif(empty($userdata[l_name])){
$message = "Last name is empty" ;
}elseif(empty($userdata[phone])){
$message = "Phone number is empty" ;
}elseif(empty($userdata[p_question])){
$message = "Hint for PIN is empty" ;
}elseif(empty($userdata[p_answer])){
$message = "PIN is empty" ;
}else{
if ($_POST["recaptcha_response_field"]) {
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if ($resp->is_valid) {
$bool_register = true ;
} else {
$message = "Incorrect security code. <br/>Please try again." ;
$error = $resp->error;
}
}else{
$message = "Security code field is empty." ;
}
}
if($bool_register) {
$userdata[enc_password] = md5($userdata[password]) ;
$userdata[reg_time] = $userdata[last_time] = time() ;
$sql = "INSERT INTO users(username, password, reg_time, last_time, f_name, l_name, email, homepage, regas, address, company, p_question, p_answer) VALUES('{$userdata[username]}', '{$userdata[enc_password]}', '{$userdata[reg_time]}', '{$userdata[last_time]}', '{$userdata[f_name]}', '{$userdata[l_name]}', '{$userdata[email]}', '{$userdata[phone]}', 'Investor', '{$userdata[address]}', '{$userdata[company]}', '{$userdata[p_question]}', '{$userdata[p_answer]}')" ;
mysql_query($sql) ;
$userdata[user_id] = mysql_insert_id() ;
login($userdata[user_id]) ;
header("Location: http://www.your-page.com") ;
exit ;
}
}
}
והקוד שמתנה האם להציג טופס/הודעה אחרת:
קוד:
<?php
if($message) {
?><span style="color: red;"><?=$message?></span><?
}
if($session[user_id] > 0) {
?>
<h2><span style="color: red;">You are already logged in.</span> </h2> <?php
}else{
if(!$bool_is_login) {
show_register_form() ;
}else{
show_other_message() ;
}
}
?>
כמובן שאלו רק כמה חלקים מהקוד המלא,
שכולל את כל הפונקציות כמו login וכו'...
תנסה לשלוח מבחוץ לטופס הזה...