ورود

View Full Version : سوال: اتصال به دیتابیس هاست از طریق یه سرور remote



woeful
یک شنبه 24 دی 1391, 21:30 عصر
سلام
من واقعا نمیدونستم این سوالمو در کدوم قسمت سایت مطرح کنم

من میخام فرضا از روی localhost با php ( اینجا میگم php ولی با ++C و کامند لاین mysql هم شد فرقی نمیکنه ) به اطلاعات دیتابیست موجود بر روی یک هاست روی اینترنت دسترسی داشته باشم ولی خب به مشکل بر میخورم!

من با کد زیر به راحتی به دیتابیس localhost متصل میشم :

<?php

$MESHINE = 'localhost';
$DATABASE = 'library';
$DATABASEPASS = '123456';
$DATABASEUSER = 'root';

if(!connectToDatabase())
{
echo "ERROR";
}
else
echo"Success";

function connectToDatabase()
{
global $MESHINE;
global $DATABASEUSER;
global $DATABASEPASS;
global $DATABASE;

$db = mysql_connect($MESHINE , $DATABASEUSER , $DATABASEPASS);
if (!$db)
{
echo mysql_errno($db);
return false;

}
return true;
}
?>

اما وقتی با همین کد به دیتابیس روی هاست دیگه وصل میشم این ارور هارو میده :


Warning: mysql_connect(): Can't connect to MySQL server on 'oldpc.ir' (4) in /var/www/db.php on line 22 Warning: mysql_errno() expects parameter 1 to be resource, boolean given in /var/www/db.php on line 26 ERROR


از طریق ترمینال هم که میخام وصل شم اینطور میشه :

woeful@woeful-VPCF134FX:~/Desktop/Qt/My Project/fire driver$ sudo mysql --host=MyHost --user=MyUser --password=MyPass
ERROR 2003 (HY000): Can't connect to MySQL server on 'XXXXXX' (110)
woeful@woeful-VPCF134FX:~/Desktop/Qt/My Project/fire driver$

به هاست هم تیکت زدم گفت در قسمت Remote MysqlDatabase یه % add کن که انجام دادم

ممنون با تشکر
woeful

Borland.C
یک شنبه 24 دی 1391, 21:36 عصر
سرور mysql هاست oldpc اجازه کانکشن ریموت رو میده؟

woeful
یک شنبه 24 دی 1391, 22:24 عصر
سرور mysql هاست oldpc اجازه کانکشن ریموت رو میده؟

ممنون از جواب

فک میکنم این اجازه رو میده چون با تیکتی که در مورد این موضوع به مسئول هاست زدم در این مورد که اجازه نداشته باشم چیزی نگفت (‌اگه منظورتون اجازه ارتباط remote از طرف سرور هست) اگر هم منظورتون اجازه از طرف هاست oldpc که مال خودم هست رو میگین در این مورد تیکت زدم و گفت چه کاری انجام بدم کی این اجازه رو داشته باشم که ( پست قبلی هم گفتم )‌ پاسخ دادن به قسمت Remote MysqlDatabase برو و ( در این قسمت باید ای پی سروری که قصد اتصال به دیتابیس رو داره اد کرد) در این قسمت یه علامت % اد کن که این کارم انجام دادم ولی بازم ارور میگیرم.

در اروری که از طریق ترمینال و از طریق mysql میگیرم یه کد ۱۱۰ به من داده که سرچ کردن و این کد مربوط به Time out بود ولی خب!! نمیدونم مشکل از کجاست!

ممنون

Mohsen6558
یک شنبه 24 دی 1391, 22:38 عصر
با سلام و احترام
دوست عزیز
شما اول توی هاستتون یه %.%.%.% بزنید این به همه ی آی پی ها اجازه ی اتصال می ده
بعد شما باید تست کنین که پورت 3306 که مربوط به MySQL هست بازه اصلا روی سرور یا نه چون اکثرا (90%) هاستینگ ها بخاطر امنتیت این پورت رو به روی آی پی های دیگه (غیر Localhost ) می بندن برای تست از آدرس : http://www.yougetsignal.com/tools/open-ports/ استفاده کنید
موفق باشید

Borland.C
یک شنبه 24 دی 1391, 22:43 عصر
محسن به نکته خوبی اشاره کرد
چک کردم بسته بود

Mohsen6558
یک شنبه 24 دی 1391, 22:48 عصر
محسن به نکته خوبی اشاره کرد
چک کردم بسته بود

حالا شدی هم درد من :)
ما تو یه پروژه ای (http://artagps.ir)نیاز شدید داریم به این سرویس ولی هنوز نتونستم یه دیتابیس درست و حسابی پیدا کنم

Borland.C
یک شنبه 24 دی 1391, 22:50 عصر
راستش منم الان باش درگیرم هر کاری کردم نشد آخر مجبور شدم از 1 اسکریپت واسط استفاده کنم
البته اگه فقط دیتابیس سرور می خوای میشه حلش کرد منظورم اینه اگه به دیتابیس خارج از هاستت نیاز داری میشه و لی اگه دیتابیس خاصی مد نظر هست که فکر کنم بهترین کار واسطه باشه :متفکر:

Mohsen6558
یک شنبه 24 دی 1391, 22:52 عصر
چطوری؟؟؟؟؟

Borland.C
یک شنبه 24 دی 1391, 22:54 عصر
چی چطوری؟میشه بگی کدوم قسمت رو می پرسی؟

Mohsen6558
یک شنبه 24 دی 1391, 22:56 عصر
کل کار اینه:
از یه سرور ویندوز یه سری اطلاعات دریافت می شه و میریزیم روی یه دیتابیس MySQL
قطعا برای اینکه این سرور ویندوز بتونه اطلاعات رو بریزه روی دیتابیس به دسترسی Remote نیاز داریم

Borland.C
یک شنبه 24 دی 1391, 23:01 عصر
روی سرور لینوکس 1 فایل php بساز جوری که 1سری اطلاعات رو بگیره بعد بریزه تو MySQL
سرور ویندوزت هم به جای اتصال ، اطلاعات رو برای اون فایل php ارسال کنه
اینجوری مشکلت حل میشه
فقط 1نکته رو خیلی دقت کن!!!!!!!!!!
به همه ورودی ها اعتماد نکن،حتما ورودی ها رو کد گذاری و در نهایت ف i ل تر کن که به دیتابیس لینوکست صدمه وارد نشه
اگه مشکلی بود در خدمتم
من این کارو کردم جواب خوبی گرفتم

Mohsen6558
یک شنبه 24 دی 1391, 23:02 عصر
wow بسیار عالی از راهنمایی شما متشکرم...

Borland.C
یک شنبه 24 دی 1391, 23:03 عصر
خواهش می کنم
موفق باشید

woeful
دوشنبه 25 دی 1391, 15:38 عصر
با سلام و احترام
دوست عزیز
شما اول توی هاستتون یه %.%.%.% بزنید این به همه ی آی پی ها اجازه ی اتصال می ده
بعد شما باید تست کنین که پورت 3306 که مربوط به MySQL هست بازه اصلا روی سرور یا نه چون اکثرا (90%) هاستینگ ها بخاطر امنتیت این پورت رو به روی آی پی های دیگه (غیر Localhost ) می بندن برای تست از آدرس : http://www.yougetsignal.com/tools/open-ports/ استفاده کنید
موفق باشید


روی سرور لینوکس 1 فایل php بساز جوری که 1سری اطلاعات رو بگیره بعد بریزه تو MySQL
سرور ویندوزت هم به جای اتصال ، اطلاعات رو برای اون فایل php ارسال کنه
اینجوری مشکلت حل میشه
فقط 1نکته رو خیلی دقت کن!!!!!!!!!!
به همه ورودی ها اعتماد نکن،حتما ورودی ها رو کد گذاری و در نهایت ف i ل تر کن که به دیتابیس لینوکست صدمه وارد نشه
اگه مشکلی بود در خدمتم
من این کارو کردم جواب خوبی گرفتم

سلام
آقا ممنون از راهنمایی ها :(

اینم از پاسخ تیکت :
سلام
به دلیل مسائل امنیتی، این قابلیت در روی سرور غیر فعال می باشد.

borland جان به نظر این پیشنهادی که دادی خوب میاد ولی من از قسمت ؛؛؛؛به همه ورودی ها اعتماد نکن،حتما ورودی ها رو کد گذاری و در نهایت ف i ل تر کن که به دیتابیس لینوکست صدمه وارد نشه؛؛؛؛؛؛؛ چیزی متوجه نشدم (منظورت همون حملات sql injection هست؟ ) میتونی یه کم واضح تر برای من توضیح بدی

محسن جان از شما هم تشکر میکنم خیلی کمک کردین

Borland.C
دوشنبه 25 دی 1391, 17:56 عصر
بله منظورم sql injectionبود و هست
اون روشی که گفتم کاربری هستش،خودم از همین روش استفاده می کنم
بازم بستگی به کار شما داره، شاید اگه 1دیتابیس جداگانه خرید کنید برای کار شما بهتر باشه باید اول ببنیم قصدمون چی هستش بعد براش 1 راه حل خوب پیدا کنیم
خب حالا باید در چه موردی توضیح بدم؟بفرمایید تا بگم

woeful
سه شنبه 26 دی 1391, 16:38 عصر
بله منظورم sql injectionبود و هست
اون روشی که گفتم کاربری هستش،خودم از همین روش استفاده می کنم
بازم بستگی به کار شما داره، شاید اگه 1دیتابیس جداگانه خرید کنید برای کار شما بهتر باشه باید اول ببنیم قصدمون چی هستش بعد براش 1 راه حل خوب پیدا کنیم
خب حالا باید در چه موردی توضیح بدم؟بفرمایید تا بگم

شما خودت از چه روشی استفاده میکنی با ای وصف پس باید یه فکری هم به حال استراق سمع بکنیم !! من رفتم سراغ کلید متقارن ایشالا اگه به نتیجه رسیدم یه آموزش میزارم همه استفاده کنن!
ممنون

Borland.C
سه شنبه 26 دی 1391, 17:43 عصر
اگه قراره از روی سرور به 1سرور دیگه وصل بشی می تونی آی پی هم تست کنی یا کلاینت 1 کد برای سرور ارسال کنه در جواب 1کدی بگیره که باید 1 کیگن هم بسازی البته قبل از اجرا کیوری
ولی راه های ساده تری هم هست مثل

mName = mysql_escape_string($_POST['myname']);
با دستور بالا اگه در myname مقدار زیر ارسال شده باشه اصلاح میشه

myname=Borland;DROP TABLE myTable;
مقدار mName=Borland
برای استراق سمع هم داده هات رو با فرمت خودت کدگذاری کن
راه برای رسیدن به خدا بسیاره!!!
اول ببین ارزش کار چقدره اصلا ارزش داره یکی خودشو تو زحمت بندازه برای حمله و از این حرفا