PDA

View Full Version : escape



tehro0n
شنبه 04 دی 1389, 00:02 صبح
من این روش رو برای ذخیره اطلاعات در db انجام می دم اما کار نمی کنه! چرا؟
وقتی از escape استفاده می کنیم باید کاراکترهای مخربی مانند ' به صورت '\ ذخیره شوند ولی بازهم به صورت ' نوشته می شود و به همین دلیل هنگام نمایش اطلاعات صفحه با مشکل بر میخوره و سفید خواهد بود!


function str_escape($str, $con=null)
{
if (get_magic_quotes_gpc())
$str = stripslashes ($str);

if (function_exists ('mysql_real_escape_string') && $con)
return mysql_real_escape_string ($str, $con);
else
return mysql_escape_string ($str);
}

if (isset($_POST['url']))
if (isValidURL($_POST['url'])) {

$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();
}

$_HOST = strtolower($_POST['url']);
$_HOST = str_escape($_HOST);

// polish the hostname
if (preg_match('@^(?:(?:http|https)://)?(?:www\.)?([^/]+[^.]+\.[^.]+)@i', $_HOST, $matches))
$_HOST = $matches[1];

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

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

$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
mysql_query("INSERT INTO `hits` (`site`, `sent`, `subject`, `comment`, `ip`) VALUES ('{$_HOST}', '10', '{$_subject}', '{$_comment}', '{$_SERVER['REMOTE_ADDR']}')", $con);
}

tehro0n
شنبه 04 دی 1389, 17:57 عصر
ممنون از هم فکری شما :لبخند:

امیـرحسین
شنبه 04 دی 1389, 23:13 عصر
همه هنر این توابع Escape مای‌سیکوئل اینه شکل ورودی رو تغییر نمیده!
اگر میخواید متن حتما تغییر کنه بجای تابعی که استفاده میکنید از addslashes (http://www.php.net/manual/en/function.addslashes.php) استفاده کنید.

tehro0n
شنبه 04 دی 1389, 23:48 عصر
چطوری امیرحسین ;)
urlencode خوبه استفاده کنیم؟
وقتی حروف فارسی تایپ می کنیم بعضی حروف رو اجق وجق نشون می ده و آخرا رو هم که هیچی بس که کاراکتر میگیره!
این تابع رو برای کاربران مخرب که به جای متن اسکریپت می فرستند و منجرب به اجرا شدن اسکریپت هنگام لود اطلاعات میشه گذاشتم :دی
ولی خوب دیکد میشه تو دیتابیس و این ور هم انکد اما باز اسکریپت اجرا میشه و حالت متنی پیدا نمی کنه!
چه کنم؟

eshpilen
یک شنبه 05 دی 1389, 08:53 صبح
قربونت موقعی که میخوای اطلاعات رو از دیتابیس در متن صفحه نشون بدی باید از تابع htmlspecialchars استفاده کنی (درمورد اطلاعاتی که قرار بوده Plain text باشن).