tehro0n
جمعه 28 آبان 1389, 00: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('"', '"', $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>
من خیلی مدل دیدم که داده شده و یکی دیگه اومده و قبلی رو نقض کرده، یکی می گه 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('"', '"', $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>