PDA

View Full Version : فرم تماس با ما



tehro0n
پنج شنبه 27 آبان 1389, 23:18 عصر
بهترین و امن ترین فرمی که برای سایت خودتون هم استفاده می کنید چجوری بوده؟ و از چه فیلترهایی رد کردید؟
من خیلی مدل دیدم که داده شده و یکی دیگه اومده و قبلی رو نقض کرده، یکی می گه str_escape خوبه و چون دیفالته با آپ شدن برنامه ها این تابع نیز بهتر میشه.. یکی میگه نه ضعیفه و ..

من این فرم رو الان دارم که البته به جای میل می خوام سایت طرف رو بگیره. اگه چیز بهتری سراغ دارید که چه بهتر! اگه هم که فکر می کنید همین خوبه و اشکالات جزئی داره که راهنماییم کنید.


<?php

include_once("_config.php");

// Copyright © 2009 Inc. All rights reserved

function isValidURL($url) {
// check the hostname
return preg_match('#^(http|https)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?#i', $url);
}

// functions for protecting and validating form input vars
function ctf_sanitize_string($string) {
$string = preg_replace("/ +/", ' ', trim($string));
return preg_replace("/[<>]/", '_', $string);
}

function ctf_stripslashes($string) {
if (get_magic_quotes_gpc()) {
return stripslashes($string);
} else {
return $string;
}
}

function ctf_clean_input($string) {
if (is_string($string)) {
return trim(ctf_sanitize_string(strip_tags(ctf_stripslash es($string))));
} elseif (is_array($string)) {
reset($string);
while (list($key, $value) = each($string)) {
$string[$key] = ctf_clean_input($value);
}
return $string;
} else {
return $string;
}
}

function ctf_output_string($string) {
return str_replace('"', '&quot;', $string);
}

// A function knowing about name case (i.e. caps on McDonald etc)
// $name = name_case($name);
function ctf_name_case($name) {
if ($name == '') return '';
$break = 0;
$newname = strtoupper($name[0]);
for ($i=1; $i < strlen($name); $i++) {
$subed = substr($name, $i, 1);
if (((ord($subed) > 64) && (ord($subed) < 123)) ||
((ord($subed) > 48) && (ord($subed) < 58))) {
$word_check = substr($name, $i - 2, 2);
if (!strcasecmp($word_check, 'Mc') || !strcasecmp($word_check, "O'")) {
$newname .= strtoupper($subed);
}else if ($break){
$newname .= strtoupper($subed);
}else{
$newname .= strtolower($subed);
}
$break = 0;
}else{
// not a letter - a boundary
$newname .= $subed;
$break = 1;
}
}
return $newname;
}


if (isValidURL($_POST['site']))
$_HOST = strtolower(ctf_clean_input($_POST['site']));

if (isset($_POST['subject']))
$_subject = ctf_name_case(ctf_clean_input($_POST['subject']));

if (isset($_POST['comment']))
$_comment = ctf_clean_input($_POST['comment']);


$con = mysql_connect ( MYSQL_HOST, MYSQL_USER, MYSQL_PASS );
if ($con) {
mysql_select_db ( MYSQL_DB, $con );
mysql_query("SET NAMES 'utf8'", $con);
} else {
printf("Connect failed: %s\n", mysql_error());
exit();
}

if($_HOST){
$res = mysql_query("SELECT `id` FROM `hits` WHERE `site` = '{$_HOST}'", $con);
if(mysql_num_rows($res)!==1){
// we have this site yet, so lets add it
$_sent = 1;
mysql_query("INSERT INTO hits (`site`, `sent`, `subject`, `comment`, `ip`) VALUES ('{$_HOST}', '{$_sent}', '{$_subject}', '{$_comment}', '{$_SERVER['REMOTE_ADDR']}')", $con);
$msg = "* اطلاعات با موفقیت ذخیره شد، کد زیر را در قالب سایت خود کپی کنید";
} else {
$msg = "false";
}
}
?>
<html dir="rtl" lang="fa">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link href="style.css" rel="stylesheet" type="text/css">

<script type="text/javascript">
function ismaxlength(obj){
var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
if (obj.getAttribute && obj.value.length>mlength)
obj.value=obj.value.substring(0,mlength)
}
</script>

<SCRIPT LANGUAGE="JavaScript">
function checkSite(myForm) {

if (!(/^(http|https):\/\/?\w+([\.-]?\w+)*(\.\w{2,3})+/.test(myForm.site.value))){
document.getElementById('msgdiv').innerHTML='<b>'+'آدرس وارد شده معتبر نمی باشد'+'</b>';
myForm.site.focus();
return (false);
}

if(myForm.subject.value==""){
document.getElementById('msgdiv').innerHTML='<b>'+'لطفاً عنوان پيام را وارد كنيد'+'</b>';
myForm.subject.focus();
return (false);
}

if(myForm.comment.value==""){
document.getElementById('msgdiv').innerHTML='<b>'+'لطفاً متن پيام را وارد كنيد'+'</b>';
myForm.comment.focus();
return (false);
}

document.getElementById('msgdiv').innerHTML='<b>'+'<?php echo $msg ?>'+'</b>';
return (true);
}

function clrmsg(){
document.getElementById('msgdiv').innerHTML='';
}
// End -->
</script>
</head>

<body bgcolor="#FFFFFF" onload="document.getElementById('formcheck').name.focus();">
<form onreset="clrmsg()" name="formcheck" target="msgframe" action="add.php" method="post" onsubmit="return checkSite(this)">
<fieldset>
<legend>تبادل لینک</legend>

<span class="oneField">
<font color="red">*</font> <label for="site" class="preField">آدرس سایت</label>
<input dir="ltr" type="text" maxlength="32" name="site" value="' . ctf_output_string($_HOST) . '" onkeyup="output.value='<!-- Begin ToolsIR.com link code -->\n<script type=text/javascript language=javascript src=http://link.toolsir.com/link.php?site='+ site.value +'&total=5></script>\n<!-- End ToolsIR.com link code -->';">
</span>

<span class="oneField">
<font color="red">*</font> <label for="subject" class="preField">عنوان</label>
<input type="text" maxlength="20" name="subject" class="required" value="' . ctf_output_string($_subject) . '">
</span>

<span class="oneField">
<font color="red">*</font> <label for="comment" class="preField">متن</label>
<textarea maxlength="140" onkeyup="return ismaxlength(this)" name="comment" class="required">' . ctf_output_string($_comment) . '</textarea>
</span>
</fieldset>

<div class="actions">
<input type="submit" class="primaryAction" name="submit" value=" ارسال ">
<input type="reset" class="secondaryAction" name="reset" value=" پاك كردن ">
</div>

<div class="errMsg" id="msgdiv" name="msgdiv"></div>
<div><textarea name="output" onmouseup=this.select() style="width:300px; height:70px" readonly></textarea></div>
</form>

<iframe class="frame" name="msgframe" src="#"></iframe>

</body>
</html>

امیـرحسین
جمعه 28 آبان 1389, 14:04 عصر
اوووووو اینهمه جنگولک بازی واسه چیه؟ ما یه خطراتی رو واسه ثبت اطلاعات داریم و یه سری رو واسه نمایشش. داریم توی MySQL میریزم باید حواسمون به SQL Injection باشه. با ترکیب magic_quotes و توابع escape میشه حلش کرد. و برای نمایش هم مشکل اساسی کدهای HTML خاص هستند که با تابع html_entities یا html_specialchars مهار میشن.
اگر واسه هر کاری بخوایم اینجوری کنیم که دیگه دنیا جای زندگی نیست :چشمک:
جدا از اون تابع str_escape که گفتید چیه؟