اذهب إلى المحتوى

Lujain Maaz

الأعضاء
  • المساهمات

    344
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    27

أجوبة بواسطة Lujain Maaz

  1. يمنح استخدام windows form application مرونة أكبر للتطبيق بالتعامل مع واجهات المستخدم UI، في حين أن تطبيقات Console لا توفر واجهات للمستخدم ويتم التفاعل مع التطبيق عن طريق تنفيذ أوامر في الواجهة Console.

    مثلًا تطبيق جمع رقمين صحيحين يتم في تطبيق Console بإظهار رسائل على التوالي للمستخدم يُطلب فيها إدخال العدد الصحيح الأول ثم العدد الثاني فيحصل على النتيجة.

    أما في تطبيق windows form application يمكن توفير واجهة للمستخدم تشبه الحاسبة تحوي أزرار يقوم المستخدم بالضغط على الأرقام التي يريد جمعها ثم الضغط على زر النتيجة.

  2. جرّب هذه الطريقة

     lv1=(ListView)findViewById(R.id.ListView01);
        lv1.setAdapter(new ArrayAdapter<String>(this,R.layout.list_item, lv_arr));
    
        lv1.setOnItemClickListener(new OnItemClickListener() {
          public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
    
            if (lv1.getItemAtPosition(position)=="test 1") {
              MediaPlayer mp = MediaPlayer.create(getApplicationContext(),R.raw.sound1);
              mp.start();
              mp.setOnCompletionListener(new OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                  mp.release();
                }
              });
            }
    
            if (lv1.getItemAtPosition(position)=="test 2") {
              MediaPlayer mp = MediaPlayer.create(getApplicationContext(),R.raw.sound2);
              mp.start();
              mp.setOnCompletionListener(new OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                  mp.release();
                }
              });
            }
    
            //And the rest of the sounds 3,4,5.
    
          }
        });

    بالتوفيق

  3. تأكد من أن HAXM installer مثبّت في الـ SDK Manager، بعد تحميله وتشغيله ستجده في المسار التالي:

    {SDK_FOLDER}\extras\intel\Hardware_Accelerated_Execution_Manager\intelhaxm.exe

    8BKmm.png

    ملحوظة: في آندرويد استديو تم تغيير الأمر "intelhaxm.exe" إلى "intelhaxm-android.exe".

    في حال تلقيت خطأ أثناء عملية التثبيت قم بتعطيل Hyper-V من خصائص الويندوز أو عن طريق تنفيذ الأمر التالي:

    dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

    بالتوفيق

  4. بتاريخ 39 دقائق مضت قال java:

     

    @javaهذا السطر فقط لأخزن عملية الاختراق التي قام بها المستخدم وهي من نوع SQLHaker

    حيث RSecurity هو صنف class قمت بإنشاءه ويحوي على الدوال المسؤولة عن أمور الأمان في الموقع ومنها التابع logAction  الذي يسجل جميع العمليات التي تحدث على الموقع.

    • أعجبني 1
  5. يعتمد تعبئة الـ Grid View على إنشاء تابع يقوم بملء الـ GridView باستخدام Ajax  ليتم عمل append للـ Grid View وفق قيمة data المررة للـ Ajax code من التابع ready حيث يتم أخذ قيمة القائمة المنسدلة وإسنادها لمتحول أو عنصر كـ Label مثلًا في التابع ready  كما في المثال التالي:

     $(document).ready(function () {
                $('#DropDownList1').change(function () {
                    var SelectedText = $(this).find(":selected").text();
                    var SelectedValue = $(this).val();
                    $('#country').text(SelectedText);
                    $('#Value').text(SelectedValue);
    
                    BindGridView();
    
                });
            });

    إنشاء التابع BindGridView:

    <!DOCTYPE html>
    <html>
    <head runat="server">
        <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        <script>
            function BindGridView() {
    
                $.ajax({
                    type: "POST",
                    url: "Index.aspx/GetData",
                    contentType: "application/json;charset=utf-8",
                    data: {},
                    dataType: "json",
                    success: function (data) {
    
                        $("#grdDemo").empty();
    
                        if (data.d.length > 0) {
                            $("#grdDemo").append("<tr><th>Username</th>  
                            <th>Firstname</th>  <th>Lastname</th>  
                            <th>EmailID</th></tr>");
                            for (var i = 0; i < data.d.length; i++) {
    
                                $("#grdDemo").append("<tr><td>" + 
                                data.d[i].Firstname + "</td> <td>" + 
                                data.d[i].Lastname + "</td> <td>" + 
                                data.d[i].Username + "</td> <td>" + 
                                data.d[i].EmailID + "</td></tr>");
                            }
                        }
                    },
                    error: function (result) {
                        //alert("Error login");
    
                    }
                });
            }
        </script>
    </head>

    النموذج:

    <body>
        <form id="form1" runat="server">
            <div>
                <asp:DropDownList ID="DropDownList1" runat="server">
                    <asp:listitem value="1">Australia</asp:listitem>
                    <asp:listitem value="2">India </asp:listitem>
                    <asp:listitem value="3">Singapore</asp:listitem>
                    <asp:listitem value="4">South Africa</asp:listitem>
                </asp:DropDownList>
                <br />
                <asp:Label ID="country" runat="server"></asp:Label>
                <br />
                <asp:Label ID="Value" runat="server"></asp:Label>
    
                <asp:GridView ID="grdDemo" runat="server">
                </asp:GridView>
            </div>
        </form>
    </body>

    Bind Data to GridView Using jQuery

  6. يُشير مصطلح performance envelope أو flight envelope بشكل عام إلى قدرات التصميم من حيث السرعة، عامل الحمولة أو الإرتفاع، يُطبّق هذا المصطلح على الكثير من المجالات مثل قدرة طائرة على المناورة عندما ترتفع سرعة الطائرة بشكل كبير لتتجاوز حد معيّن هنا يطلق مصطلح أن الطائرة تطير خارج المغلف "outside the envelope" وهو الحد الخطر الذي لا يجب تجاوزه.

    من هنا يمكننا استنتاج أن لأي تطبيق مهما كان يتمتع بأداء ممتاز لابد أن يكون له حد أعلى يقف عنده ولا يمكن تجاوزه لأنه سيعود بنتائج سيئة. وكما يقول المثل "ما زاد عن حده انقلب الى ضده".

    لنسقط الفكرة هنا ونأخذ لمحة بسيطة عن مفهوم نظام HDFS وهي اختصار لـ Hadoop Distributed File System وتعني نظام الملفات الموزّع وهو نظام محمول وقابل للتطوير مكتوب بلغة جافا.

    يقوم نظام HDFS بتوزيع البيانات المخزّنة عبر الخوادم وتخزين نسخ متعددة من البيانات على خوادم مختلفة لضمان عدم ضياع أي من البيانات في حال فشل أحد الخوادم (يوفّر نظام ملفات Hadoop  قدرات توافر عالية).

    يعتمد أداء تطبيقات Hadoop على عدّة عوامل بما في ذلك التكوين الذي قمت بعمله، مواصفات الحاسب، تكوين الذاكرة وإعدادات JVM (Java Virtual Machine). كذلك لا يحتسب الوقت اللازم لبدء تشغيل JVM من ضمن سرعة الأداء.

    وبما أن Hadoop يوفر مجموعة من الخيارات لضبط الأداء Performance فيما يتعلق بوحدة المعالجة المركزية، القرص الصلب والذاكرة فإنه يتم النظر إلى تحسين استخدام هذه الموارد وخاصة الذاكرة والقرص الصلب لرفع مستوى أداء التطبيق دون أن يتجاوز عتبة "المغلف".

     

  7. برأيي الطريقة الأمثل هي بناء ويب سيرفيس تقوم هي بالاتصال بقاعدة البيانات وجلب البيانات لعرضها والتعامل معها في التطبيق.

    الأمر الآخر أن مايكروسوفت طرحت مؤخرا مفهوم الـ Universal App أصبح بإمكانك بناء تطبيق ويندوز يعمل كتطبيق Windows Store ، Windows Phone أو ويندوز تابلت في نفس الوقت.

    الفكرة الرائعة الآن هي إنشاء Cross Platform باستخدام Xamarin بحيث تتيح لك بناء تطبيق يعمل على Android ، iOS و Universal App بلغة C# و بنفس طريقة بناء ال Universal App.

    • أعجبني 1
  8. توفر تقنية MD5 إمكانية تشفير النصوص بطريقة لا يمكن فيها الرجوع للنص الأصلي بحيث تتم المقارنة بين النصوص بعد التشفير ولا يتم التعامل مع النصوص بصيغتها الأصلية.
    يتم تشفير النصوص باستخدام الصف MD5 في C# وإنشاء غرض منه من النوع MD5CryptoServiceProvider:
    كما في المثال التالي:

    MD5 md5 = new MD5CryptoServiceProvider();

    ومن ثم استدعاء الدالة CopmuteHash وتمرير معامل Argument وهو النص المراد تشفيره باستخدام ASCIIEncoding.ASCII.GetBytes(text).

    //compute hash from the bytes of text
            md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(text));

    بعد ذلك قم بأخذ القيمة من الغرض md5 عن طريق الدالة Hash حيث أن القيمة المرتجعة هي عبارة مصفوفة من byte.

       byte[] result = md5.Hash;

    في النهاية أنشئ StringBuilder واعمل append للنتيجة كما في المثال التالي:

      public static string MD5Hash(string text)
        {
            MD5 md5 = new MD5CryptoServiceProvider();
    
            //compute hash from the bytes of text
            md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(text));
    
            //get hash result after compute it
            byte[] result = md5.Hash;
    
            StringBuilder strBuilder = new StringBuilder();
            for (int i = 0; i < result.Length; i++)
            {
                //change it into 2 hexadecimal digits
                //for each byte
                strBuilder.Append(result[i].ToString("x2"));
            }
            return strBuilder.ToString();
        }

    تشفير نصوص باستخدام MD5

  9. نعم يمكنك بعد إنشاء النّسخ instances أن تقوم بتشغيلها على التوازي in parallel ويمكن عمل ذلك إما باستخدام amazon command line tools كما في المثال التالي:

    aws ec2 run-instances help
       --count (string)
          Number of instances to launch. If a single number is provided, it is
          assumed  to  be the minimum to launch (defaults to 1). If a range is
          provided in the form min:max then the first number is interpreted as
          the  minimum  number of instances to launch and the second is inter-
          preted as the maximum number of instances to launch.

    او استخدام واجهة سطر الأوامر  CLI:

    ec2-run-instances
     -n, --instance-count MIN[-MAX]
          The number of instances to attempt to launch. May be specified as a
          single integer or as a range (min-max). This specifies the minimum
          and maximum number of instances to attempt to launch. If a single
          integer is specified min and max are both set to that value.

    عندما تبدأ العمل على Amazon Ec2 ستجد مجموعة واسعة من الخوادم الافتراضيّة أو ما تسمى بـ instances. وتشمل أنواع الخوادم الافتراضيّة instances مجموعات مختلفة من وحدة المعالجة المركزية والذّاكرة والتّخزين، والقدرة على التّواصل وتمنحك المرونة في اختيار المزيج المناسب من الموارد للتطبيقات الخاصة بك.

    الرّوابط أدناه تشرح طريقة إنشاء النّسخ وتحديد الموارد المناسبة لكل نسخة.

    كيف أنشئ EC2 instance في AWS؟

    Ec2 Instances and AMIs

    طبعًا يوجد مجموعة من الإعدادات عليك أن تقوم بتهيئتها قبل البدء بالعمل على Amazon EC2 منها إنشاء مجموعات أمان Security Group و IAM User وإنشاء سحابة افتراضيّة VPC تجدها في الروابط أدناه:

    ما هو IAM user في AWS ولم يُستخدم؟

    كيف أنشئ IAM User في AWS؟

    كيف أنشئ Key Pair في Amazon ECS؟

    كيف أنشئ سحابة خاصة افتراضية في AWS؟

    كيف أنشئ مجموعات أمان لـ container instances في ECS؟

    Setting Up with Amazon EC2

    أخيرًا الرابط التالي يشرح طريقة إنشاء حساب على Amazon Services حيث تعطيك أمازون وصول إلى خدماتها واستخدامها بشكل مجاني لمدة عام واحد:

    كيف أنشئ حساب AWS Account على أمازون؟

     

    بالتوفيق

    • أعجبني 1
  10. نعم يمكنك استخدام السكربت من الـ #C أي يمكنك استدعاء تابع جافا سكربت أو كتابة سكربت جديد باستخدام ScriptManager كما في المثال التالي:

    protected void Page_PreRender(object sender, EventArgs e)
    {
        ScriptManager.RegisterStartupScript(this, GetType(), "YourUniqueScriptKey", 
            "alert('This pops up');", true);
    }

     

    • أعجبني 1
  11. على الرّحب والسعة

    قبل أن أجيبك هل يمكنك كتابة محتوى ملف الـ WCF Service الذي قت بإنشاءه؟

    الرابطين أدناه يوضّحان بالتفصيل طريقة إنشاء WCF Service والتعامل معها:

    A Simple Example of WCF Service

    http://www.codeproject.com/Tips/468354/WCF-Example-for-Inserting-Deleting-and-Displaying

    سأوضّح لك -على سبيل المثال لا الحصر- أن أي خدمة ويب Web Service أو WCF Service في الموقع يتم استخدامها إما لتجنب عملية الـ Submit على الخادوم عند جلب بيانات من قاعدة البيانات وفي هذه الحالة نستخدم الـ Web Service أو لإرسال رسائل غير متزامنة من endpoint Service لأخرى باستخدام WCF Service.

    يتم التّعامل مع الـ Web Service عن طريق ajax أي أنه يتم إنشاء Web Method في ملف الويب سيرفيس ويتم استدعاء هذه الدالة باستخدام ajax.

    [WebService] 
    public class Service : System.Web.Services.WebService 
    { 
          [WebMethod] 
          public string Test(string strMsg) 
          { 
              return strMsg; 
          } 
    }

    في حين تستخدم WCF Service الـ DataContractAttribute وDataMemeberAttribute

    [DataContract] 
    public class Item 
    { 
        [DataMember] 
        public string ItemID; 
        [DataMember] 
        public decimal ItemQuantity; 
        [DataMember] 
        public decimal ItemPrice;
    }

    ولأوضّح لك سريعًا أحد فوائد الويب سيرفيس ومتى يتم استخدامها، تخيل أنه لديك قائمة منسدلة وتريد أن تجلب بيانات من قاعدة البيانات اعتمادًا على القيمة التي يختارها المستخدم من الخيارات الموجودة في القائمة -مثلًا- قائمة منسدلة تحوي على خيارات ألوان وقام المستخدم باختيار اللون الأزرق فعليك جلب كل المنتجات ذات اللون الأزرق من قاعدة البيانات ولو تم ذلك بدون استخدام الويب سيرفيس ستقوم الصفحة بعملية Submit على الخادوم وسيعاد تحميل الصفحة من جديد مما يزيد العبء على الخادوم وبالتالي تراجع الأداء Performance وكذلك قد تظهر بعض المشاكل التي لا تتوقعها.

    بالنسبة للبرنامج الخاص بك وهو حساب مساحة المربع والمستطيل فلا يوجد داعي لاستخدام الويب سيرفيس ولا حتى الذهاب للخادوم يمكنك عمل التطبيق بشكل كامل عن طريق الجافاسكربت ولكن يمكنك بالطبع استخدام الويب سيرفيس ولكن في هذا النوع من التطبيقات استخدامها لن يخدمك بشيء.

    بالتوفيق

    • أعجبني 1
  12. أولًا هناك ملاحظة هامة هل يقوم المستخدم بإدخال المعرّف الأساسي primary key في الـ TextBox؟؟ أم أن Group ID هو عمود آخر في الجدول (وهذا هو الصّحيح)

    يجب عند ملأ القائمة المنسدلة ببيانات جدول من قاعدة البيانات أن تُعطى للخاصية Value قيمة المعرَف id لكل خاصية Text في القائمة المنسدلة.

    ومن ثم تقومين بعمل استعلام لجلب قيمة الحقل Group ID من الجدول على أساس المعرّف الأساسي id للقيمة المختارة من القائمة المنسدلة ومقارنتها مع القيمة المدخلة في الـ TextBox.

     

    بالتوفيق

  13. لحفظ صورة داخل مجلد ضمن تطبيق #C اكتب الشيفرة التالية في الحدث Click الخاص بزر حفظ الصورة:

    private void button11_Click(object sender, EventArgs e)
            {
                try {
    
                    //Bitmap b = new Bitmap("name of the file");
    
                    //b.Save("path of the folder to save");
    
                    Bitmap b = new Bitmap(@"C:\Documents and Settings\Desktop\7506.jpg");
    
                    b.Save(@"C:\Extract\test.jpg");
                }
                catch( Exception ex )
                 {
    MessageBox .Show (ex.Message );
                }
    
            }

    لا أدري ما هي مهمة التطبيق بالضبط ولكن إن كنت تقوم برفع الصور من خلال التطبيق وحفظها في قاعدة البيانات (أي عمل Upload للصور) فلا أرى أنّك مضطر لتخزين الصور بشكل ثنائي في قاعدة البيانات ومن ثم استيرادها وحفظها في مجلد داخل التطبيق إن كان تطبيقك بسيط وليس له علاقة بتطبيقات الجرافيكس.

    الطريقة التي أراها جيدة هي حفظ (أسماء) ملفات الصور فقط في قاعدة البيانات كسلاسل نصّية Strings وتخزين ملفات الصور في مجلد داخل التطبيق يحمل نفس اسم معرّف السّجل في جدول قاعدة البيانات.

    بالتوفيق

  14. حسنًا الأمر بسيط يعتمد على أخذ جميع القيم غير المحدّدة من القائمة الأولى وعمل append للقائمة الثانية بهذه القيم وذلك بإنشاء حلقة تكرار وتطبيقها على خيارات القائمة الأولى وفحص الخيار إن كان غير محدد يتم عمل إلحاق له في القائمة الثانية عن طريق الجافاسكربت كما في المثال التالي:

    أولًا إنشاء القوائم كما في المثال التالي:

    <select name="sourceSelect" id="sourceSelect" multiple="multiple">
      <option value="example1">Example1</option>
      <option value="example2">Example2</option>
      <option value="example3">Example3</option>
      <option value="example3">Example4</option>
    </select>


    <input type="button" name="forward" id="forward" value=">" />

    <input type="button" name="backward" id="backward" value="<" />


    <select name="destinationSelect" id="destinationSelect" multiple="multiple" size="3">
        
    </select>

    في الجافا سكربت:

     

    $(function() {
        
        function cutAndPaste(from, to) {
            $(to).append(function() {
                return $(from + " option:not(:selected)").each(function() {
                    this.outerHTML;
                }).remove();
            });
        }
        
        $("#forward").off("click").on("click", function() {
            cutAndPaste("#sourceSelect", "#destinationSelect");
        });
        
        $("#backward").off("click").on("click", function() {
            cutAndPaste("#destinationSelect", "#sourceSelect");
        });
        
    });

    بالتوفيق

  15. هل يمكنك توضيح السؤال أكثر؟ حتى أستطيع مساعدتك

    هل تريدين عند اختيار اسم أحد الطلاب من القائمة المنسدلة الأولى أن يتم ملء القائمة المنسدلة الثانية بجميع الأسماء عدا الاسم الذي أُختير في القائمة الأولى؟

     

    • أعجبني 1
  16. نعم بالتأكيد يمكن استخدام Python في تطبيقات المعلوماتية الحيوية وقد تكون أفضل لغة يمكن استخدامها في هذا المجال، كذلك تُستخدم لغة R و Perl في هذا المجال.

    ليس لدي معلومات تفصيلية عن التقانة أو المعلوماتية الحيوية ولكن قد تفيدك الروابط أدناه.

    Which Are The Best Programming Languages For A Bioinformatician?

    Python For Bioinformatics and Your First Python for Bioinformatics Program

    Python for Bioinformatics - Python As A Calculator

    • أعجبني 1
  17. يتم التخزين في الـ Cookie واسترجاع القيمة المخزّنة كما في المثال التالي:

    HttpCookie aCookie = Request.Cookies["loginCookie"];
    string username = Server.HtmlEncode(aCookie.Value);

    إن كنت تقوم بعمل نموذج تسجيل دخول فلا يتم عادةً تخزين المعلومات الخاصة بالمستخدم بعد تسجيل الدخول في الـ Cookie وذلك لعدّة أسباب منها أن الـ Cookie يمكن مسحها والوصول إليها بسهولة كما أنها محدودة المساحة.

    ملاحظة: لا يتم أخذ معلومات المستخدم مباشرة من الحقول يجب التأكد أولًا من صحة البيانات المدخلة بمقارنتها مع البيانات المخزّنة في قاعدة البيانات.

    آلية تخزين معلومات تسجيل الدخول تتم على الشكل التالي:

    بعد التأكد من صحة اسم المستخدم أو البريد الاكتروني وكلمة المرور  المخزّنة في قاعدة البيانات يتم عمل تعيين لهذه المعلومات وذلك بتخزينها في الـ Session مثل اسم المستخدم والمعرّف الخاص به user Id وكذلك حالته online state. لذا إن كنت ترغب بعرض رسالة ترحيبيّة للمستخدم بعد تسجيل الدخول فالطريقة الأنسب هي تخزين اسم المستخدم في الـ Session بعد نجاح عملية تسجيل الدخول وعمل إعادة توجيه للصفحة الرئيسية ثم جلب قيمة الـ Session وهي اسم المستخدم وعرضها في المكان الذي ترغب به.

    ملاحظة: يمكن تعريف الـ Session بأنها الجلسة الفاصلة بين تسجيل دخول وتسجيل خروج المستخدم من الموقع. كذلك تكون المعلومات المخزّنة في الـ Session مخفية بالنسبة للمستخدم واستخدامها أكثر أمانًا من الـ Cookie.

    فيما يلي روابط عن استخدام الـ Cookie والـ Session 

    Cookie Overview

    Session Overview

  18. أخي الكريم بالنسبة للنوع Reflected وحسب ما هو واضح في الشيفرة الخاصة بك فالأمر بسيط فقط استخدم HtmlEncode أو UrlEncode لمنع أي سكربت أو مدخلات غير صحيحة قد تحدث في رابط الصفحة غبر Query String هكذا:

    string x = Request.QueryString["id"] as string;
            if (x != null)
            {
                Response.Write(Server.HtmlEncode(x));
            }

    - باستخدام UrlEncode:

    protected void Page_Load(object sender, EventArgs e)
        {
            string destinationURL = "http://www.contoso.com/default.aspx?user=test";
    
            NextPage.NavigateUrl = "~/Finish?url=" + Server.UrlEncode(destinationURL);
        }    

    أما بالنسبة للنوع Stored نعم ما شرحته في الجواب الأول هو عن النوع Stored حيث تقوم باستدعاء التابع FilterText عند استخدام أي من قيم المدخلات -التي تم إدخالها في الحقول- ضمن جمل الاستعلام الخاصة بقاعدة البيانات كما في المثال التالي:

     sql = "SELECT ID, AgentID, AgenBossID, CreationDate FROM  MyTable WHERE ID = " + ((FiltterText(txtID.Text) == "") ? "0" : FiltterText(txtID.Text));

     

    • أعجبني 3
  19. بما أنك قمت بتعريف المتغير ضمن Razor وهو متغير String فيجب  عند تمريره لتابع جافا سكربت كمتغير String أن تُسبقه بإشارة @ وتحيطه بعلامتي اقتباس كما في المثال التالي:

    '@countryName'

     

    @{
                   String countryName = @Model.Country.Name;
                                         
                   <li onclick="getName('@countryName')" >

    بالتوفيق

  20. هل يمكنك كتابة الشيفرة الخاصة بالـ Query string؟ حتى أستطيع مساعدتك

    أحد الحلول أن تنشئ تابع يقوم بعمل فلترة للقيم الخارجية الموجودة في رابط الصفحة والتي يتم تخزينها في قاعدة البيانات وتقوم باستدعاء هذا التابع عند كل عملية استعلام.

    طريقة الفلترة تعتمد على إيجاد جميع القيم (النصوص) التي يمكن كتابتها لعمل الإختراق من نوع Reflected Xss بما فيها أسماء الجداول في قاعدة البيانات الخاصة بالموقع وجمل الاستعلام وشروطها.

     فيما يلي تابع يُرجع قائمة List من نوع String تحوي جميع القيم المحتملة لعمل Reflected Xss:

      private static List<string> blackList()
        {
            var result = new List<string>()
            {
                "where",
                "Step2_Process",
                "Step2_ProcessRoomRate",
                "Step2_ProcessRoom",
                "CurrencyRate",
                "TopDist",
                "UAction",
                "H_Book",
                "H_Amenity",
                "M_Hotel",
                "Agent",
                "H_Description",
                "AgentMove",
                "M_Room",
                "H_Destination",
                "H_Hotel",
                "Nationality",
                "M_DateRange",
                "Msg",
                "TempResult",
                "FROM master",
                "select",
                "select *",
                "drop",
                "update",
                "insert into",
                "delete from",
                "where",
                "/'",
                "'",
                "--",
                "1 OR 1=1",
                "1' OR '1'='1",
                "1'1",
                "1 EXEC SP_ (or EXEC XP_)",
                "1 AND 1=1",
                "1' AND 1=(SELECT COUNT(*) FROM",
                "1 AND USER_NAME() = 'dbo'",
                "\'; DESC",
                "1\'1", 
                "@@",
                "SELECT @@version",
                "SELECT user",
                "SELECT system_user",
                "northwind",
                "model",
                "msdb",
                "tempdb",
                "pubs",
                "EXEC",
                " sp_",
                "SELECT HOST_NAME()",
                "CREATE TABLE",
                "BULK INSERT",
                "DROP TABLE",
                "xp_cmdshell",
                "sysobjects",
                "dbo",
                "where",
                "select"
            };
    
            return result;
        }

    بعد ذلك كتابة التابع  FilterText والذي يستخدم التابع blackList لفحص النص إن كان يحوي أي من تلك القيم كما في المثال التالي:

      public static String FiltterText(String text)
        {
            String tempText = text;
            bool isOk = true;
            foreach (string item in blackList())
            {
                if (text.ToLower().Contains(item.ToLower()))
                {
                    int index = text.ToLower().IndexOf(item.ToLower());
                    text = text.Remove(index, item.Length);
                    isOk = false;
                }
            }
            if (!isOk)
            {
                RSecurity.logAction("SQL Fillter", "HZTR-000001", HttpContext.Current.Session[SessionStatic.UserName] + " try to hack with this sql: (" + tempText.Replace("'", "''") + ")", "", "", "", HttpContext.Current.Request.Url.AbsolutePath, RSecurity.LogAction_danger_activity, RSecurity.LogType_SQLHaker);
            }
            return text.Trim();
        }

    أرجو أن أكون قد وُفقت في تقديم الحل.

    بالتوفيق

    • أعجبني 2
  21. السبب أن النموذج قد يحوي على قيم إدخال خاطئة مثلًا قد تكون القيمة المدخلة في TextBox قيمة نصيّة String والحقل يتطلّب قيمة عدد صحيح integer وذلك لأنه في الـ MVC يتم التحقق من القيم المدخلة في الحقول ومقارنتها بالقيم المسندة إليها مثال إذا أدخلت في الحقل التالي قيمة String وهو حقل يجب أن يُكتب فيه قيمة السعر وهو عدد حقيقي فلن تكون قيمة ModelState.IsValid تساوي True:

      @Html.TextBoxFor(model => model.Product.ProductPrice)

    لمعرفة ما هي القيم الغير صحيحة التي تم إدخالها في النموذج استخدم الشيفرة التالية قبل جملة

     if (ModelState.IsValid) وقم بتحديد break point وعمل Debug كما في المثال التالي:

     var errors = ModelState.Values.SelectMany(v => v.Errors);

    ستظهر لك الأخطاء في الـ ErrorMessage

    56c345676693e_ModelState.thumb.png.2f84d

     

    بالتوفيق

    • أعجبني 1
  22. تأخذ القائمة المنسدلة DropDownListFor في ASP.Net MVC Razor متغير من نوع IEnumerable لذلك عند تعبئة القائمة المنسدلة يجب أن تمرر لها متغير من نوع IEnumerable يحوي على البيانات التي قمت بجلبها من قاعدة البيانات ولعمل ذلك أنشئ Model Class المقابل للجدول في قاعدة البيانات كما في المثال التالي:

    public class Student
        {
            private String studenId;
    
            public String StudentId
            {
                get { return studenId; }
                set { studenId = value; }
            }
    
            private String name;
    
            public String Name
            {
                get { return name; }
                set { name = value; }
            }
    }

    ثم أنشئ متغير من نوع IEnumerable كما في المثال التالي:

       IEnumerable<Student> lstStudents;
    
            public IEnumerable<Student> LstStudents
            {
                get { return lstStudents; }
                set { lstStudents = value; }
            }

    ثم أنشئ دالة تقوم بجلب البيانات من جدول Student باستخدام DataSet كما في المثال التالي (يجب أن تقوم بإنشاء صف SQLHelper ليعالج عمليات الاستعلام من قاعدة البيانات):

      public IEnumerable<Student> getStudents()
            {
                SQLHelper mySqlHelper = new SQLHelper();
                SqlDataAdapter da = null;
                DataSet ds = null;
                String sql = "";
                sql = @"SELECT ID, StudentId, Name  FROM Student Order By Id";
                mySqlHelper.executeSql(sql, ref ds, ref da);
                if (ds != null)
                {
                    List<Student> ls = new List<Student>();
                    foreach (DataRow row in ds.Tables[0].Rows)
                    {
                        ls.Add(
                            new Student
                            {
                                Id= int.Parse(row["StudentId"].ToString()),
                                Name = row["Name"].ToString(),
                               
                            });
    
    
                    }
    
                    LstStudents = ls;
                }
                return LstStudents;
            }

    الآن مرر الـمتغير للقائمة المنسدلة في الصفحة التي تأخذ الـ Model Class Student:

         @Html.DropDownListFor(model => model.Student.StudentId, new SelectList(Model.Student.LstStudents, "Id", "Name"), "Select Main Student")

     

    بالتوفيق

  23. ما فهمته من سؤالك أنك تريد عمل نافذة تتوضّع بشكل حر على الشاشة بحيث تظهر فوق محتوى الشاشة عند الضغط على زر.

    الأمر بسيط تُمثّل النافذة عنصر div، ولعملها أنشئ عنصر div وعيّن الخاصيّة position بالقيمة absolute. وذلك حتى يأخذ مكانه بشكل مستقل دون أن يؤثر أو يتأثر بباقي عناصر الصفحة. وعيّن الخاصية display بالقيمة none حتى يتم إخفاء الـ div ولا يظهر إلا عند الضغط على الزر. كذلك يجب تعيين الخاصيّة z-index: 1000 ليظهر العنصر div فوق محتوى الصفحة  كما في المثال التالي:

      <div id="divBox" style="top: 0; left: 0; position: absolute; width: 50%; display: none; z-index: 1000; overflow-y: scroll; overflow-x: hidden; color: white;">
                  

    الآن أنشئ الزر الذي سيُظهرالنافذة عند الضغط عليه واستدعي تابع الـ JQuery -الذي سيُنفّذ عند الضغط على الزر- في التابع  onclick:

    <input type="button" value="Show Box" onclick="showDivBox()">

    في هذا التابع اكتب:

     function showDivBox() {
                        $('#divBox').slideDown();
                    }

    الآن سيظهر لك الـ div عند الضغط على الزر.

    يمكنك إضافة أيقونة إغلاق لتتمكّن من إغلاق النافذة ولعمل ذلك اكتب الشيفرة التالية:

      <div id="divBox" style="top: 0; left: 0; position: absolute; width: 50%; display: none; z-index: 1000; overflow-y: scroll; overflow-x: hidden; color: white;">
        
         <a style="cursor:pointer" onclick="closeDiv()" title="إغلاق"><i class="fa fa-close fa-2x"></i></a>
        
    </div>
                  

    في السكربت:

       function closeDiv() {
    
         $('#divBox').slideUp();
    }

    56c0b2f3286f8_Divbox.thumb.png.7421c7f3f

     

    بالتوفيق

    • أعجبني 1
×
×
  • أضف...