<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Arvin</title>
        <link>https://virgool.io/feed/@0xShervin</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-29 02:43:00</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/505902/avatar/yRVUAV.png?height=120&amp;width=120</url>
            <title>Arvin</title>
            <link>https://virgool.io/@0xShervin</link>
        </image>

                    <item>
                <title>برد BeagleV، کامپیوتری از جنس RISC-V که قادر به اجرای Linux می‌باشد</title>
                <link>https://virgool.io/@0xShervin/beaglev-an-affordable-risc-v-computer-designed-to-run-linux-mawvwpofixsx</link>
                <description>BeagleV board - برد BeagleVبرد BeagleV یک برد از جنس کامپیوترهای تک بردی است که Linux را اجرا می‌کند. این برد بر پایه ساختار پردازنده RISC-V است که علاوه بر اجرای لینوکس روی آن قادر می‌باشد تا در برنامه‌های پردازشی مرزی استفاده شود که می‌شود در یادگیری خودروهای خودران، تشخیص اشیا، تشخیص گفتار، و بسیاری از کارهای مربوط به AI.برای چی به RISC-V اشاره می‌کنیم؟تا اینجا کار را میدانیم که بسیاری از کامپیوترها بر مبنای پردازنده‌های Intel و AMD با ساختار x86 است. البته نمونه دیگری که میتوان مثال زد ARM‌ است که همان بر مبنای ساختار RISC-V است. این پردازنده‌ها به دلیل مصرف انرژی کمتر و کوچک بودن برای کامپیوترهای تک بردی بسیار مناسب‌اند. خب این موضوع چه ربطی به RISC-V داره؟ ARM در حقیقت یک برند است و یک شرکت را تشکیل می‌دهد که کارش ساخت پردازنده و یا مجوز درست کردن برای آنها است، ولی RISC-V یک شرکت نیست بلکه فقط یک استاندارد است که حتی هیچ مجوزی ندارد! این در حقیقت به این معنی که می‌شود در تمامی تولید کننده‌های سخت افزاری استفاده شود. در حقیقت برد BeagleV، پردازنده از شرکت SiFive است، شرکتی که تخصیص یافته به ساخت پردازنده‌های RISC-V. جالبی اینجاست که این به ما امکان می‌دهد تا این برد بر پایه ساختار نرم افزار و سخت افزار آزاد ساخته شود.اجزا و امکاناتااجزا برد BeagleVاین برد با یک پردازنده SiFive U74 RISC-V Dual core processor که با فرکانس 1.5GHz است، کچ 2M از جنس L2 دارد، که البته با یک Vision DSP Tenisilica-VP6 که برای بینایی کامپیوتر استفاده می‌شود، و یک NVDLA Engine (Nvidia Deep Learning Accelerator) تک هسته‌ای که برای کارهای AI استفاده می‌شود و یک Neural Network Engine نیز در آن قرار دارد.پردازنده این برد بر مبنای دو SiFive U74 Standard Cores پیاده سازی شده است، U74 در حقیقت یک RISC-V تک هسته‌ای است که قادر به اجرای Linux و سایر برنامه‌های پردازشی مرزی است.سخت افزار بردبرای خلاصه می‌شود به اجزای آن در زیر اشاره کرد:شبکه Wi-Fi با پهنای باند 2.4Gz‌ ای و اتصالی Bluetooth 4.2یک نفطه اتصال HDMI با پشتیبانی از کیفیت 1080p با 30FPSچهار درگاه USB 3.0 یک پورت Ethernet که برای اتصال اینترتی گیگابیتی استفاده می‌شود.یک جک صدای 3.5mm که برای اتصال صدا است.درگاه microSD که برای سیتسم عامل و ذخیره اطلاعات استفاده می‌شود.سری 40 پینی GPIO‌ که محل اتصال دوربین، سنسورها، صفحه تماشا و ... استیک درگاه USB تایپ C با قدرت 5V و 3A همچنین تخمین زده می‌شود که از HAT های برد Raspberry Pi پشتیبانی کند.قیمت و موجودیتاین برد با دو مشخصه رم 8GB و 4GB ارایه شد، که رم بیشتر به معنی هزینه بیشتر است. درحال حاضر این برد موجود نمی‌باشد.برد BeagleV وارد فضایی خواهد شد که در حال حاضر تحت سلطه Raspberry Pi 4 ارزان‌تر و Jetson Nano انویدیا است. برخلاف این دو گزینه، نرم‌افزار و سخت‌افزار BeagleV کاملاً متن‌باز و آزادانه در دسترس کاربران خواهد بود، اما قیمت آن در مقایسه با گزینه‌های جایگزین کمی بالاست. جالب است که ببینیم عملکرد BeagleV چگونه است.این مقاله ترجمه‌ای از سایت itsfoss با نوشته‌ی SOURAV RUDRA با عنوان BeagleV: An Affordable RISC-V Computer Designed to Run Linux است.از بردارد عزیزم ممنونم که باعث شد با این دنیای کامپیوترهای تک بردی بیشتر آشنا بشم و از آن لذت ببرم.</description>
                <category>Arvin</category>
                <author>Arvin</author>
                <pubDate>Thu, 29 Feb 2024 12:28:24 +0330</pubDate>
            </item>
                    <item>
                <title>مقدمه ای بر الگوریتم Perlin noise</title>
                <link>https://virgool.io/@0xShervin/perlin-noise-s8i0jizpygrb</link>
                <description>یک مولد اعداد تصادفی خوب اعدادی را تولید می کند که هیچ رابطه‌ای با هم ندارند و هیچ الگوی قابل تشخیصی را نشان نمی دهند. همانطور که می بینیم، کمی تصادفی بودن می تواند در برنامه ریزی رفتارهای ارگانیک و واقعی چیز خوبی باشد. با این حال، تصادفی بودن به عنوان اصل راهنمای واحد لزوماً طبیعی نیست.الگوریتمی وجود دارد که نتایج طبیعی تری را به همراه دارد و به آن &quot;Perlin noise&quot; می‌گویند. کن پرلین در اوایل دهه 1980، عملکرد نویز را در حین کار بر روی فیلم اصلی Tron توسعه داد؛ او از آن برای ایجاد بافت های رویه‌ای برای جلوه‌های کامپیوتری استفاده کرد. در سال 1997، پرلین برای این کار برنده جایزه اسکار در دستاورد فنی شد. این الگوریتم را می توان برای ایجاد جلوه های مختلف با کیفیت های طبیعی مانند ابرها، مناظر و بافت های طرح دار مانند سنگ مرمر استفاده کرد.این الگوریتم ظاهر ارگانیک تری دارد زیرا یک توالی منظم («صاف») از اعداد شبه تصادفی تولید می کند. نمودار زیر الگوریتم را در طول زمان نشان می دهد که محور x نشان دهنده زمان است. به نرمی منحنی توجه کنید.noiseدر مقابل، نمودار زیر اعداد تصادفی خالص را در طول زمان نشان می دهد.randomبرنامه ProcessingJS یک پیاده سازی از الگوریتم دارد: تابع noise(). تابع noise () یک، دو یا سه آرگومان می گیرد، زیرا نویز در یک، دو یا سه بعد محاسبه می شود. بیایید با نگاه کردن به نویز یک بعدی شروع کنیم.جزییات noiseمرجع نویز به ما می گوید که نویز در چندین &quot;اکتاو&quot; محاسبه می شود. فراخوانی تابع noiseDetail هم تعداد اکتاوها و هم اهمیت آنها را نسبت به یکدیگر تغییر می دهد. این به نوبه خود نحوه عملکرد نویز را تغییر می دهد.ترسیم یک دایره در پنجره ProcessingJS در یک مکان تصادفی x را در نظر بگیرید:var x = random(0, width);
ellipse(x, 180, 16, 16);اکنون، به‌جای یک مکان تصادفی x، یک مکان-x برای Perlin noise می‌خواهیم که «صاف‌تر» باشد. ممکن است فکر کنید که تنها کاری که باید انجام دهید این است که ()random را با noise() جایگزین کنید.var x = noise(0, width);
ellipse(x, 180, 16, 16);در حالی که از نظر مفهومی این دقیقاً همان کاری است که ما می‌خواهیم انجام دهیم (محاسبه یک مقدار x که بین 0 و عرض با توجه به نویز پرلین متغیر است) این پیاده‌سازی صحیح نیست. در حالی که آرگومان های تابع ()random محدوده ای از مقادیر را بین حداقل و حداکثر مشخص می کند، noise() به این شکل کار نمی کند. در عوض، noise() از ما انتظار دارد که در یک آرگومان عبور کنیم که به معنای &quot;لحظه ای در زمان&quot; است، و همیشه مقداری بین 0 و 1 برمی‌گرداند. می توانیم Perlin noise یک بعدی را به عنوان یک دنباله خطی از مقادیر در طول زمان در نظر بگیریم.حال، برای دسترسی به یکی از آن مقادیر نویز در ProcessingJS، باید یک لحظه خاص از زمان را به تابع noise() منتقل کنیم. مثلا:var n = noise(0.03);ما می‌توانیم برنامه‌ای بنویسیم که یک متغیر زمان را ذخیره می‌کند و آن مقدار نویز را به طور مداوم در draw() درخواست می‌کند.// Adapted from Dan Shiffman, natureofcode.com
var t = 0.03;
 draw = function() {
  var n = noise(t);
  println(n);
};کد بالا منجر به چاپ همان مقدار می شود. این به این دلیل اتفاق می‌افتد که ما بارها و بارها نتیجه تابع noise() را در یک نقطه از زمان می‌خواهیم. با این حال، اگر متغیر زمان t را افزایش دهیم، نتیجه متفاوتی خواهیم گرفت.// Adapted from Dan Shiffman, natureofcode.com
var t = 0;
draw = function() {
  var n = noise(t);
  println(n);
  // Move forward in time
  t += 0.01;
};سرعتی که t را افزایش می‌دهیم نیز بر صافی نویز تأثیر می‌گذارد. اگر به موقع پرش های بزرگی انجام دهیم، در این صورت از جلو می گذریم و مقادیر تصادفی تر خواهند بود.کد بالا را چندین بار اجرا کنید و t را 0.01، 0.02، 0.05، 0.1، 0.0001 افزایش دهید، نتایج متفاوتی خواهید دید.نگاشت نویزاکنون ما آماده پاسخ به این سوال هستیم که با مقدار نویز چه کنیم. هنگامی که مقداری با محدوده بین 0 و 1 داشتیم، این به ما بستگی دارد که آن محدوده را با آنچه می خواهیم ترسیم کنیم.ما فقط می‌توانیم در حداکثر عدد در محدوده ضرب کنیم، اما این فرصت خوبی برای معرفی تابع نقشه () ProcessingJS است که در موقعیت‌های بعدی به ما کمک می‌کند. تابع map () پنج آرگومان می گیرد. ابتدا مقداری است که می خواهیم ترسیم کنیم، در این مورد n. سپس باید محدوده فعلی مقدار (حداقل و حداکثر) و به دنبال آن محدوده مورد نظر خود را به آن بدهیم.در این مورد، ما می دانیم که نویز محدوده ای بین 0 و 1 دارد، اما ما می خواهیم یک مستطیل با عرض بین 0 و عرض فعلی بکشیم.// Adapted from Dan Shiffman, natureofcode.com
var t = 0;
draw = function() {
  var n = noise(t);
  // Using map() to customize the range of Perlin noise
  var x = map(n, 0, 1, 0, width);
  rect(0, t*100, x, 1);
  
  t += 0.01;
};می‌توانیم دقیقاً همان منطق را برای واکر تصادفی خود اعمال کنیم و هر دو مقدار x و y آن را با توجه به Perlin noise نسبت دهیم.// Adapted from Dan Shiffman, natureofcode.com
var Walker = function() {
    this.x = width/2;
    this.y = height/2;
    this.tx = 0;
    this.ty = 10000;
};
Walker.prototype.display = function() {
    stroke(0, 0, 0);
    point(this.x, this.y);
};
// Randomly move up, down, left, right, or stay in one place
Walker.prototype.walk = function() {
    this.x = map(noise(this.tx), 0, 1, 0, width);
    this.y = map(noise(this.ty), 0, 1, 0, height);
    // Move forward through “time.”
    this.tx += 0.01;
    this.ty += 0.01;
};
var w = new Walker();
draw = function() {
    w.walk();
    w.display();
};توجه کنید که چگونه مثال بالا به یک جفت متغیر اضافی نیاز دارد: tx و ty. این به این دلیل است که ما باید دو متغیر زمانی را دنبال کنیم، یکی برای مکان x شی Walker و دیگری برای مکان y.اما یک چیز کمی در مورد این متغیرها وجود دارد. چرا tx از 0 و ty از 10000 شروع می شود؟ در حالی که این اعداد انتخاب های دلخواه هستند، ما به طور خاص دو متغیر زمانی خود را با مقادیر مختلف مقداردهی اولیه کرده ایم. این به این دلیل است که تابع نویز قطعی است: هر بار برای یک زمان خاص نتیجه یکسانی را به شما می دهد. اگر مقدار نویز t را همزمان برای x و y بخواهیم، x و y همیشه برابر خواهند بود، به این معنی که جسم واکر فقط در امتداد یک مورب حرکت می کند. در عوض، ما به سادگی از دو قسمت مختلف فضای نویز استفاده می‌کنیم که از 0 برای x و 10000 برای y شروع می‌کنیم تا x و y بتوانند مستقل از یکدیگر عمل کنند.در حقیقت، هیچ مفهوم واقعی از زمان در اینجا وجود ندارد. این یک استعاره مفید است که به ما کمک می کند تا بفهمیم عملکرد نویز چگونه کار می کند، اما در واقع آنچه ما داریم مکان است، نه زمان. نمودار بالا یک توالی خطی از مقادیر نویز را در یک فضای یک بعدی نشان می دهد و هر زمان که بخواهیم می توانیم مقداری را در یک مکان x خاص بخواهیم. در مثال‌ها، اغلب متغیری به نام xoff را می‌بینید که به جای t برای زمان (همانطور که در نمودار ذکر شده است) مقدار x-offset را در امتداد نمودار نویز نشان می‌دهد.این مقاله ترجمه‌ای از مقاله Perlin noise در سایت خان آکادمی است.</description>
                <category>Arvin</category>
                <author>Arvin</author>
                <pubDate>Wed, 21 Feb 2024 13:54:55 +0330</pubDate>
            </item>
                    <item>
                <title>خلاصه‌ای بر الگوریتم Boids</title>
                <link>https://virgool.io/@0xShervin/summary-of-boid-algorithm-oxbsmcb8cwxz</link>
                <description>گروهی از پرندگان که می‌شود توسط الگوریتم Boid مدل ساری شود - برگرفته از سایت stanfordالگوریتم Boids برنامه‌ای است که زندگی مصنوعی را می‌سازد. این الگوریتم توسط آقای Craig Reynolds در سال ۱۹۸۶ معرفی شده است و پر زدن پرنده‌ها را بصورت گروهی شبیه سازی می‌کند. در حقیقت اسم Boid خلاصه‌ای از اسم &quot;bird-oid object - چیز پرنده‌ای&quot; که به یک چیز پرنده مانند اشاره می‌کند. این مفهوم نمونه‌ای از یک مفهوم بسیار کلی است که به گونه‌ای مدل های مختلف آن مطرح شده است.توضیح مدلهمانطور که شبیه سازهای مصنوعی عمل می‌کنند، الگوریم Boids یک نمونه از حرکت برآمدگی است! درسته، سختی این الگوریتم از برهمکنش های تک شکل‌ها که در انیجا همان Boid ها است، می‌باشد که از چند قانون ساده پیروی می‌کنند. این قوانین در زیر آمده است:جدایی پذیری: این امکان برای این تبیع شده که از ازدحام بسیار زیاد گروهی پرنده‌ها پرهیز شود.قانون جدایی پذیریشکل گیری: بطوری به مرکز میانگین گروهی پرنده‌ها تمایل پیدا می‌کنند.قانون شکل گیرییکپارچگی: تمایل حرکت به سمت موقعیت میانگین (مرکز جرم) گروهی پرنده‌ها.قانون یکپارچگیکه البته این قوانین کافی نیستند و میتوانند قوانین دیگری هم مانند جدانگری سختی و هدف گردی.حرکت پرنده‌ها می‌تواند بصورت آشفته وار (گروه های جدا شده از هم و رفتار وحشیانه) یا قانونمند داشته باشد.چارچوب Boid در گرافیک کامپیوتری استفاده می‌شود، که یک واقعیت نگاره از گروه‌ها و دیگر موجودات را در اختیار قرار می‌دهد. که البته میتوان در بازی Half-Life که در سال 1998 ساخته شد اشاره کرد.مدل Boid در حقیقت در ساختار اپلیکیشن‌های دیگر به کار رفته است. همانند برنامه به کار رفته در ایستگاه‌های رادیویی چند کاناله اینترنتی.همچنین توصیه می‌کنم مطالبی همانند Conway&#x27;s Game of Life و Swarm intelligence را تحقیق و مطالعه کنید.این مقاله صرفا ترجمه‌ و خلاصه‌ای از ویکی Boid است.بخش عملی داستانخب برای اینکه از ساختار این الگوریتم متوجه بشیم میتونیم به برنامه زیر که به زبان Rust نوشته شده و از موتور Amethyst game engine استفاده می‌کند.برای شروع کار قدم به قدم میریم جلو:دستور زیر را وارد کنید:git clone https://github.com/henninglive/boids-rs.git۲. پیش نیازها در سیستم عامل Debian/Ubuntu با دستور زیر وارد کنید:apt install gcc pkg-config openssl libasound2-dev cmake build-essential python3 libfreetype6-dev libexpat1-dev libxcb-composite0-dev libssl-dev libx11-dev libfontconfig1-dev۳. مطمین شوید که Rust 1.47.0 را در اختیار دارید:rustup default 1.47.0۴. برنامه را بسازید:cargo build --release۵. فایل در پوشه زیر قرار می‌گیرد:target/release/boids۶. میتوانید از دستور زیر هم استفاده کنید:cargo run --releaseخب کار ما اینجا تمام شد :) امیدوارم از مفهوم و عمل خوشتون آمده باشد. نظر شما راجع به این خلاصه چیست؟</description>
                <category>Arvin</category>
                <author>Arvin</author>
                <pubDate>Mon, 12 Feb 2024 17:34:15 +0330</pubDate>
            </item>
                    <item>
                <title>خلاصه‌ای از موتور بازی سازی Bevy</title>
                <link>https://virgool.io/@0xShervin/%D8%AE%D9%84%D8%A7%D8%B5%D9%87-%D8%A7%DB%8C-%D8%A7%D8%B2-%D9%85%D9%88%D8%AA%D9%88%D8%B1-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%B3%D8%A7%D8%B2%DB%8C-bevy-hcbp6ngvybxm</link>
                <description> Bevy logo - لوگوی Bevyموتور بازی Bevy  یکی از موتورهای داده محور است که با زبان Rust ساخته شده است. این برنامه کاملا رایگان و اوپن سورس خواهد بود.این موتور دارای ویژگی‌های زیر می‌باشد:ظرفیت: مجموعه‌ای از ابزارهای دوبعدی و سه بعدی را شامل می‌شود.سادگی: برای تازه واردها انتخابی ساده ولی کاملا منعطف پذیر برای قوی شدن.داده محور: ساختاری کاملا داده محور با دیدگاه Entity Component System.ماژولار: از آن گونه‌ای که نیاز دارید استفاده کنید و چیزی را که دوست ندارید جایگزاری کنید.سریع: منطق برنامه باید بصورت سریع اجرا شود و هر وقت که امکان دارد بصورت موازی پردازش شود.مولد: تغییرات باید سریع کامپایل شوند وگرنه صبر کردن چیز جالبی نیست.البته این موتور برای بازی های کلی توصیه نمی‌شود و هنوز در مراحل ساخت است. بطوریکه اگر بخواهید برای پروژه‌ی بزرکی استفاده کنید میتوانید از موتور بازی سازی Godot استفاده کنید.خب تا اینجا کار توضیح دادیم بریم سراغ راه اندازی پروژه امون:ریپازیتوری Bevy را clone کنید:git clone https://github.com/bevyengine/bevy۲. به پوشه bevy بروید:cd bevy۳. با استفاده از دستور git زیر به نسخه اصلی Bevy سوویچ کنید:# use the latest Bevy release
git checkout latest
# or a specific version
git checkout v0.11.0نمونه فایل را در پوشه اصلی باز کنید:cargo run --example breakoutهمچنین می‌توانید Bevy را بعنوان زیر ساختار اضافه کنید:cargo add bevyهمچنین میتوانید آن را بصورت دستی وارد فایلCargo.toml کنید:[dependencies]
bevy = &amp;quot0.12&amp;quot # make sure this is the latest versionساخت یک برنامه سادهکد زیر را در فایل اصلیتون یعنی main.rs کپی کنید:fn main() {
    App::new().run();
}سپس با دستور زیر برنامه را اجرا کنید:cargo runچه چیزی یک فایل App را تشکیل می‌دهد؟محیط world: این بخش بطور کلی تمامی داده های بازی ما را نگه می‌دارد.محیط schedule: این بخش داده‌ای را که سیستم نگه می‌دارد، حفظ می‌کند.محیط runner: این بخش برنامه را تفسیر می‌کند تا استراتژی روندی آنرا کنترل کند.این موتور بازی سازی شامل plugin های متفاوتی هم می‌شود که از گفتن آن در اینجا خودداری شده است.</description>
                <category>Arvin</category>
                <author>Arvin</author>
                <pubDate>Fri, 09 Feb 2024 20:35:24 +0330</pubDate>
            </item>
                    <item>
                <title>نظارت شبکه در اندروید با mitmproxy</title>
                <link>https://virgool.io/@0xShervin/monitoring-network-on-android-with-mitmproxy-bohmu5dughrd</link>
                <description>mitmproxy logo - اوگوی mitmproxyاغلب در طول توسعه برنامه های کاربردی تلفن همراه، ما به شدت به مصرف API ها متکی هستیم. توانایی بازرسی و ویرایش تماس‌های API در طول توسعه می‌تواند در زمان زیادی صرفه‌جویی کند. با این حال، بر خلاف توسعه وب، در اندروید، ما نمی توانیم از مرورگر شبکه بازرس استفاده کنیم، بنابراین باید به ابزارهای پراکسی تکیه کنیم.راه اندازی mitmproxyآخرین نسخه را برای پلتفرم خود در [لینک] دانلود کنید.برنامه mitmweb را باز کنید، این پوشه mitmproxy را در زیر فهرست اصلی کاربر شما ایجاد می کند که حاوی فایل های گواهی است.سپس mitmweb را متوقف کنید و یک فایل config.yaml ایجاد کنید و کلید listen_port:8888 را اضافه کنید.راه اندازی شبیه ساز/دستگاهپوشه mitmproxy را باز کنید و mitmproxy-ca-cert.cer را در شبیه ساز/دستگاه خود کپی کنید. اگر از یک شبیه ساز استفاده می کنید، فقط می توانید آن را بکشید و رها کنید و در پوشه Downloads نمایش داده شود.در شبیه ساز/دستگاه خود، به تنظیمات سیستم بروید و گواهی CA را جستجو کنید، سپس فایل mitmproxy-ca-cert.cer را انتخاب کرده و آن را نصب کنید.اکنون تنظیمات پروکسی را ویرایش کنید. به تنظیمات Wi-Fi بروید و پیکربندی شبکه خود را ویرایش کنید تا از پروکسی دستی، نام میزبان 10.0.2.2 (ماسک IP محلی) و پورت به عنوان 8888 استفاده کنید.راه اندازی پروژهفایلی به نامnetwork_security_config.xml در مسیر res/xml با محتوای زیر ایجاد کنید. این فایل بیان می کند که ساخت های ما که به عنوان قابل اشکال زدایی علامت گذاری شده اند به گواهی اعتماد دارند.&lt;?xml version=&amp;quot1.0&amp;quot encoding=&amp;quotutf-8&amp;quot?&gt;
&lt;network-security-config&gt;
    &lt;debug-overrides&gt;
        &lt;trust-anchors&gt;
            &lt;certificates src=&amp;quotsystem&amp;quot /&gt;
            &lt;certificates src=&amp;quotuser&amp;quot /&gt;
        &lt;/trust-anchors&gt;
    &lt;/debug-overrides&gt;
&lt;/network-security-config&gt;در AndroidManifest.xml، با افزودن ورودی زیر به تگ برنامه، به این فایل پیکربندی ارجاع دهید.&lt;application
        android:allowBackup=&amp;quottrue&amp;quot
        android:dataExtractionRules=&amp;quot@xml/data_extraction_rules&amp;quot
        android:networkSecurityConfig=&amp;quot@xml/network_security_config&amp;quot &lt;----------- this
        &gt;نحوه استفادهفیلتر کردنمی‌توانیم درخواست‌هایی را که می‌خواهیم ببینیم با وارد کردن عبارت مورد نظر در بالا فیلتر کنیم. این برای محدود کردن نتایجی که می‌خواهیم ببینیم مفید است، یا حتی فقط با استفاده از عباراتی مانند dev. یا .qa، فراخوان‌های API را برای یک محیط خاص نشان می‌دهد.نفوذبا وارد کردن عبارت در قسمت Intercept می‌توانیم درخواست‌ها را رهگیری کنیم. در هنگام اشکال زدایی مانند نقاط شکست کار می کند، درخواست را متوقف می کند و اجازه می دهد مقادیر را از URL، بدنه یا درخواست تغییر دهید. این می تواند برای آزمایش موارد لبه یا آزمایش سریع سناریوهایی که داده های مورد نیاز را نداریم مفید باشد.با فشردن Resume All به مرحله پاسخگویی می‌روید. و در اینجا ما همچنین می توانیم پاسخ به مقادیر خواسته خود را ویرایش کنیم. این همچنین می تواند برای آزمایش موارد لبه یا سناریوهایی که داده های لازم را نداریم مفید باشد. علاوه بر این، ما حتی می‌توانیم یک سناریوی معین را در صورت خراب شدن سرور API آزمایش کنیم، زیرا به سرور ضربه نمی‌زنیم!این مقاله خلاصه ای از مقاله Monitoring Network on Android with mitmproxy توسط William Alves می باشد.</description>
                <category>Arvin</category>
                <author>Arvin</author>
                <pubDate>Fri, 09 Feb 2024 19:24:22 +0330</pubDate>
            </item>
                    <item>
                <title>ساخت image سفارشی برای Raspberry Pi با ابزار Packer</title>
                <link>https://virgool.io/@0xShervin/how-to-build-a-custom-raspberry-pi-os-image-using-packer-gzeh6l83cuky</link>
                <description>لوگوی Packer از HashiCorpابزار Packer یکی از ابزارهایی است که برای ساخت image بر روی سکوی سیستم عامل ها استفاده می‌شود و به راحتی می‌توان در زیر ساخت برنامه های مدرن استفاده کرد. نکته جالب توجه ابزار این است که بصورت Open source (قابل استفاده بصورت Free) است و plugin های مختلف را می‌توان روی آن اعمال کرد. Packer به گونه‌ای عمل می‌کند که می‌توان از plugin های سفارشی شده برای بهتر کردن قابلیت های کلی هم استفاده کرد حتی بدون اینکه source code اصلی آن تغییری کند. بصورت کلی plugin های Packer به دو صورت است:بیلدرها (Builders): که برای راه اندازی زیرساخت استفاده می‌شود.تامین کننده ها (Provisioners): که برای اعمال کردن تغییرات دلخواه به image سیستم عامل استفاده می‌شود.پلاگین (plugin) Packer برای معماری های ARMبصورت پیش فرض Packer ساخت image سیستم عامل های مبتنی بر ARM را پشتیبانی نمی‌کند و ما در این مقاله از plugin به نام solo-io/packer-builder-arm-image که از طریق GitHub در دسترس است، برای ساخت image های مبتنی بر ARM استفاده می‌کنیم.مقدماتبا توجه به مستندات solo-io/packer-builder-arm-image، برای ساخت image های مبتنی بر ARM همانند Raspberry Pi پیش نیازها و باینری هایی نیاز است:یک هاست یا ماشین لینوکسی، ترجیحا Ubuntu نسخه های LTSگیت Gitابزار Packerپلاگین Packer برای معماری ARMبا کامند زیر باینری ها و پیش نیازها را نصب کنید:sudo apt update
sudo apt install git wget zip unzip build-essential kpartx qemu binfmt-support qemu-user-static e2fsprogs dosfstoolsدر ادامه Packer را بر روی ماشین خود دانلود و نصب کنید: (دقت به ورژنی که نصب می‌کنید داشته باشید!)export PACKER_RELEASE=&amp;quot1.6.6&amp;quot
cd /tmp/
wget https://releases.hashicorp.com/packer/${PACKER_RELEASE}/packer_${PACKER_RELEASE}_linux_amd64.zip 
unzip packer_${PACKER_RELEASE}_linux_amd64.zip 
sudo mv packer /usr/local/bin 
packer --versionو یا برای دانلود و نصب بهتر است به مستندات اصلی خود سایت مراجعه کنید.در این موقعیت، شما Packer و پیش نیازها برای ساخت image بر روی معماری ARM را نصب کرده اید. حال زمان آن رسیده است که plugin ابزار Packer برای ساخت رو معماری ARM را نصب کنید: (دقت به ورژنی که نصب می‌کنید داشته باشید!)export PACKER_ARM_BUILDER_VERSION=&amp;quot0.1.6&amp;quot
cd /tmp/
wget https://github.com/solo-io/packer-builder-arm-image/releases/download/v${PACKER_ARM_BUILDER_VERSION}/packer-builder-arm-image
sudo mv packer-builder-arm-image /usr/local/bin
sudo chmod +x /usr/local/bin/packer-builder-arm-imageساخت image برای Raspberry Pi با Packer ARM Pluginبرای فهمیدن اینکه پلاگین solo-io/packer-builder-arm-image چگونه کار می‌کند، یک نمونه ساده و ابتدایی از آن در GitHub قرار دارد که ریپازیتوری source4learn/raspberry-pi-os-image-builder است:git clone git@github.com:source4learn/raspberry-pi-os-image-builder.git
cd raspberry-pi-os-image-builderدر این ریپازیتوری یک فایل اصلی JSON برای تنظیم کردن Packer، تعدادی اسکریپت Bash و فایل های تنظیماتی دیگری قرار دارد.در این مقاله ما از Raspberry Pi Lite Buster image استفاده می‌کنیم و یک splash screen سفارشی را هنگام بالا آمدن درست می‌کنیم. این ورژن از Raspberry Pi هیچگونه محیط گرافیکی ندارد بنابراین ما درایوهای گرافیکی و Linux xserver را نصب نکردیم.قبل از اینکه سراغ ساخت image برای Raspberry Pi بریم، بیایید با هم فایل JSON را بررسی کنیم:{
 &amp;quotvariables&amp;quot: {
     &amp;quotvariable_key&amp;quot : &amp;quotvariable_value&amp;quot
   },
   &amp;quotbuilders&amp;quot: [
     {
       &amp;quottype&amp;quot: &amp;quotarm-image&amp;quot,
       &amp;quotiso_url&amp;quot: &amp;quot&lt;image-url&gt;&amp;quot,
       &amp;quotiso_checksum&amp;quot: &amp;quot&lt;image-checksum&gt;&amp;quot,
       &amp;quottarget_image_size&amp;quot: &lt;image-size-in-Kb&gt;
      }
   ],
&amp;quotprovisioners&amp;quot: [
    {
      &amp;quottype&amp;quot: &amp;quotfile&amp;quot,
      &amp;quotsource&amp;quot: &amp;quot&lt;source_file_path&gt;&amp;quot,
      &amp;quotdestination&amp;quot: &amp;quot&lt;destination_file_path&gt;&amp;quot
    },
    {
      &amp;quottype&amp;quot: &amp;quotshell&amp;quot,
      &amp;quotinline&amp;quot: [
        &lt;commands_to_execute&gt;
      ]
    },
    {
      &amp;quottype&amp;quot: &amp;quotshell&amp;quot,
      &amp;quotscript&amp;quot: &amp;quot&lt;shell_path_to_execute&gt;&amp;quot
    }
  ]
}این فایل JSON سه بخش کلی و مهم دارد، اولی variables، دومی builder و سومی provisioner است.در بخش variables، ما متغیرها را بصورت کلید-مقدار (key-value) مشخص و اعمال می‌کنیم. بخش builder حاوی نوع سازنده ما، URL به فایل ISO image ما، مقدار Checksum برای ISO image ما اندازه image معماری ARM ما برای ساخت. بخش آخر یعنی provisioner شامل مجموعه اعمالاتی می‌شود که ما بر روی ایمیج ARM اعمال می‌کنیم. مقادیر متداول بخش provisioner ما شامل shell inline، file و shell است. پارامتر file یک فایل انتخابی را وارد ISO image ما می‌کند، shell اجازه می‌دهد که اسکریپت BASH را اعمال کنیم و shell inline هم به ما اجازه می‌دهد که کامندهای inline را اجرا کنیم.فایل packer-raspberry-pi-os-lite.json در زیر آمده است:{
  &amp;quotvariables&amp;quot: {
  },
  &amp;quotbuilders&amp;quot: [
    {
      &amp;quottype&amp;quot: &amp;quotarm-image&amp;quot,
      &amp;quotiso_url&amp;quot:
&amp;quothttps://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2021-03-25/2021-03-04-raspios-buster-armhf-lite.zip&amp;quot,
      &amp;quotiso_checksum&amp;quot: &amp;quotsha256:ea92412af99ec145438ddec3c955aa65e72ef88d84f3307cea474da005669d39&amp;quot,
      &amp;quottarget_image_size&amp;quot: 2147483648
    }
  ],
  &amp;quotprovisioners&amp;quot: [
    {
      &amp;quottype&amp;quot: &amp;quotfile&amp;quot,
      &amp;quotsource&amp;quot: &amp;quot./rasp.png&amp;quot,
      &amp;quotdestination&amp;quot: &amp;quot/home/pi/rasp.png&amp;quot
    },
    {
      &amp;quottype&amp;quot: &amp;quotfile&amp;quot,
      &amp;quotsource&amp;quot: &amp;quot./scripts/.bash_profile&amp;quot,
      &amp;quotdestination&amp;quot: &amp;quot/home/pi/.bash_profile&amp;quot
    },
    {
      &amp;quottype&amp;quot: &amp;quotfile&amp;quot,
      &amp;quotsource&amp;quot: &amp;quot./scripts/.xinitrc&amp;quot,
      &amp;quotdestination&amp;quot: &amp;quot/home/pi/.xinitrc&amp;quot
    },
    {
      &amp;quottype&amp;quot: &amp;quotfile&amp;quot,
      &amp;quotsource&amp;quot: &amp;quot./scripts/splashscreen.service&amp;quot,
      &amp;quotdestination&amp;quot: &amp;quot/etc/systemd/system/splashscreen.service&amp;quot
    },
    {
      &amp;quottype&amp;quot: &amp;quotshell&amp;quot,
      &amp;quotinline&amp;quot: [
        &amp;quotecho &#039;Install APT Packages&#039;&amp;quot,
        &amp;quotecho nameserver 8.8.8.8 &gt; /etc/resolv.conf&amp;quot,
        &amp;quotapt-get update&amp;quot,
        &amp;quotapt-get -y install --no-install-recommends xserver-xorg-video-all xserver-xorg-input-all xserver-xorg-core xinit x11-xserver-utils fbi curl&amp;quot,
        &amp;quotrm -f /etc/motd&amp;quot,
        &amp;quotchown pi:pi -R /home/pi/&amp;quot
      ]
    },
    {
      &amp;quottype&amp;quot: &amp;quotshell&amp;quot,
      &amp;quotscript&amp;quot: &amp;quot./scripts/run.sh&amp;quot
    }
  ]
}در ادامه کامند مخصوص ساخت image را در دیرکتوری  raspberry-pi-os-image-builder اعمال کنیم:sudo packer build packer-raspberry-pi-os-lite.jsonاین عمل ممکن است مقدار زمان ببرد تا کامل شود. بعد از پایان عمل یک فایل نهایی output-arm-image/image را بدست می‌آورید. با انجام عملیات زیر می‌توانید مکان قرار فایل و اندازه را محاسبه کنید:# Check file location
ls -la output-arm-image/image
# Check file size
du -hs output-arm-image/imageهمچنین در آخر هم می‌توانید فایل را فشرده سازی کنید:zip -r rpi-arm-image.zip output-arm-image/imageدر آخر هم فایل شما آماده است و می‌توانید SD کارت خود را آماده کنید و عملیات boot up را انجام دهید.در این مقاله ما پلاگین Packer که مبتنی بر ARM است و نام آن solo-io/packer-builder-arm-image است استفاده کردیم. پلاگین جایگزین دیگری هم برای اینکار وجود دارد که نام آن kaczanowski/packer-builder-arm است و امکانات اضافه ای همانند افزایش حجم disk و یا ساخت image مبتنی بر ARM از پایه را به ما می‌دهد.این مقاله ترجمه بخشی از مقاله ای است که در medium قرار دارد و نویسنده آن Source4learn است، می‌باشد. امیدوارم این مقاله برای شما کابردی بوده باشد و چیزی یاد گرفته باشید. :)</description>
                <category>Arvin</category>
                <author>Arvin</author>
                <pubDate>Sat, 13 Jan 2024 12:00:24 +0330</pubDate>
            </item>
                    <item>
                <title>خلاصه‌‎ای بر مفهوم Server-Side Rendering (SSR) در React</title>
                <link>https://virgool.io/@0xShervin/server-side-rendering-in-react-tgqmjpxrmhhq</link>
                <description>توضیح ساده درباره کارکرد SSRمفهوم SSR انقلابی به پا کرده است و باعث شده تا سرعت (User performance) و تجربه کاربری (User experience) در React بسیار بالا برود.مفهوم آن بطور کلی اینگونه است که، در مفهوم قبلی آن یعنی Client-Side Rendering (بصورت خلاصه CSR) فایل HTML کوچک را مرورگر می‌گرفت و بقیه صفحه توسط JavaScript ساخته می‌شد و آن را پردازش می‌کرد. اما در SSR فایل اولیه HTML توسط server پردازش می‌شود و سپس به کلاینت مرورگر فرستاده می‌شود.مزیت های SSR در Reactبهینه شدن سرعت نمایش سایتبا پردازش اولیه فایل HTML سمت سرور باعث می‌شود اینکار باعث می‌شود کلاینت مرورگر به راحتی صفحه را نمایش دهد.بهینه شدن برای موتورهای جستجو (SEO)با اینکار موتورهای جستجو به راحتی می‌توانند این سایت ها را در مقابله با CSR دسته بندی کنند و به نمایش قرار دهند.بهتر شدن تجربه کاربریبا افزایش سرعت نمایش سایت، مخصوصا برای دستگاه هایی با توان پردازشی پایین و شبکه هایی با سرعت کم، به تجربه‌ای عمیق و بهتر در رابطه با سایت کمک می‌کند.تجربه بهتر در اشتراک گذاری در شبکه های اجتماعیهنگامی که کاربران لینکی از اینگونه سایت ها را به اشتراک می‌گذارند، با پردازش سمت سرور محتوای سایت را به خوبی پیش نمایش می‌دهند.قابل دسترس قرار دادن در دستگاه های کم تواناین قابلیت بطور کلی باعث می‌شود محتوا به خوبی در دستگاه های کم توان و یا ظرفیت پردازشی کم، به خوبی قابل دسترس باشند.اعمال کردن این مفهوم در Reactدیگه وقت عمل رسیده و تو این بخش می‌خواهیم SSR رو در اپلیکیشن های React اعمال کنیم.1- مقدمات سرور Node.js را راه اندازی کردن: برای اینکار میتوان از framework محبوب Express استفاده کرد. البته گزینه های دیگری هم موجود است که می‌توان Hapi یا Koa را نام برد.2- نصب پیش نیازها: در این بخش به نصب پیش نیازهای ذیل می‌پردازیم:react، react-dom، express و react-dom/servernpm install express react react-dom react-dom/server3- ایجاد یک پایانه پردازش سمت سرور: از متد renderToString از کتابخانه react-dom/server برای پردازش component های React به HTML استفاده کنید:// server.js
const express = require(&#039;express&#039;);
const React = require(&#039;react&#039;);
const { renderToString } = require(&#039;react-dom/server&#039;);
const App = require(&#039;./App&#039;); // Your React component

const app = express();

app.get(&#039;/&#039;, (req, res) =&gt; {
  const html = renderToString(&lt;App /&gt;);
  res.send(`
    &lt;!DOCTYPE html&gt;
    &lt;html lang=&amp;quoten&amp;quot&gt;
    &lt;head&gt;
      &lt;meta charset=&amp;quotutf-8&amp;quot&gt;
      &lt;title&gt;SSR React App&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
      &lt;div id=&amp;quotroot&amp;quot&gt;${html}&lt;/div&gt;
      &lt;script src=&amp;quot/client.bundle.js&amp;quot&gt;
    &lt;/body&gt;
    &lt;/html&gt;
  `);
});

app.listen(3000, () =&gt; {
  console.log(&#039;Server is listening on port 3000&#039;);
});4- پکیج بندی کردن کد سمت کلاینت: برای اینکار از ابزاری به نام Webpack استفاده می‌کنیم. با اینکار مرورگر این پکیج را بارگیری می‌کند و تعامل سمت کلاینت را برقرار می‌کند.5- به نمایش قرار دادن برنامه: حالا به آخر رسیدیم با اجرا کردن برنامه و وارد آدرس http://localhost:3000 شدن می‌توانیم از دست رنج خود نهایت لذت را ببریم. :دیدر آخر هم توصیه می‌کنم حتما Next.js را که یک framework مبتنی بر React است و توسط شرکت Vercel توسعه یافته شده را حتما زیر نظر بگیرید زیرا که بصورت پایه SSR در آن تعبیه شده است.امیدوارم از این مطلب خوشتون آمده باشد و این مقاله ترجمه‌ای از مقاله Abbas Ashraf Mughal از سایت medium است.</description>
                <category>Arvin</category>
                <author>Arvin</author>
                <pubDate>Wed, 03 Jan 2024 00:58:39 +0330</pubDate>
            </item>
                    <item>
                <title>در آپدیت های اخیر OWASP TOP 10 چه چیز هایی تغییر کرده است؟</title>
                <link>https://virgool.io/@0xShervin/%D8%AF%D8%B1-%D8%A2%D9%BE%D8%AF%DB%8C%D8%AA-%D9%87%D8%A7%DB%8C-%D8%A7%D8%AE%DB%8C%D8%B1-owasp-top-10-%DA%86%D9%87-%DA%86%DB%8C%D8%B2-%D9%87%D8%A7%DB%8C%DB%8C-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%DA%A9%D8%B1%D8%AF%D9%87-%D8%A7%D8%B3%D8%AA-loubpsqmhlut</link>
                <description>خب تو این مقاله بطور خلاصه میخواهیم به موضوع تغییرات اخیر OWASP TOP 10 بپردازیم. برنامه Open Web Application Security Program، یا بطور مخفف OWASP یک سازمان غیر انتفاعی است که برای ارتقای امنیت نرم افزارها اختصاص یافته است. این سازمان چندین سرویس مختلف به توسعه دهندگان ارائه میدهد تا برای ارتقای ابزارها، اتفاقات اجتماعی و منابع آموزشی استفاده میشود. این سازمان معمولا راهکارهای کاربردی ارائه میدهد که شامل آپدیت کردن برنامه OWASP Top 10 Web Application Security Risks هم میشود.اما بطور کلی این لیست Top Ten ریسک های امنیتی وب اپلیکیشن ها چگونه تعیین میشود؟ OWASP این لیست را با آنالیز کردن داده ها و جمع کردن نظرسنجی های صنعتی ارائه میدهد. دو تا از ریسک های که در لیست Top Ten قرار دارند توسط نظرسنجی هایی که توسط اعضای جامعه گردآوری شده است، منطبق داده شده است. این پروسه به توسعه دهندگان اجازه میدهد تا خطراتی را که معمولا به آن ها برخورد میکنند برجسته کنند که این خود در داده های آنالیز شده نمایان نمیشود.در بخش بعدی میخواهم به این موضوع بپردازم که OWASP Top 10 Web Application Security risks چه موضوعاتی را شامل میشود:این لیست که اخیرا آپدیت جدید آن منتشر شده است، با مقایسه آن با لیستی که در سال 2017 منتشر شده است، در این لیست توسعه دهندگان میتوانند مشکلات متدوال توسعه نرم افزار ها را با مشکلاتی که اخیرا شناسایی شده اند مشاهده کنند: خب تو این بخش میخواهم درباره چندین بخش مختلف از اجزا این جدول را برایتان تشریح کنم:Injection:ریسک هایی که در این دامنه قرار میگیرند شامل وارد کردن داده های غیر قابل اعتماد به یک مفسر میشود که بعنوان یک درخواست یا کامند ارسال میشود. در این موضوع injection هایی همچون SQL, NoSQL, OS, LDAP, و دیگری قرار میگیرد. تزیرقات مخرب باعث میشود که کامندهای خطرناکی اجرا شوند و یا داده های حساسی لو رود. این لیست اکنون شامل cross-site scripting نیز میشود که در سال 2017 وارد این لیست شده است. یک راه برای اینکه بتوان از این نوع حملات (تزیقات -مثل آمپول ?-) جلوگیری کرد، جدا سازی داده ها از کامندها و کوئری هاست.Broken Authentication:همانطور که از اسمش مشخص است، این حمله زمانی اتفاق می افتد که اجرای مدیریت نشست (session) ناقص باعث میشود تا مهاجم کنترل اکانت مقابل را بدست بگیرد. اینکار به مهاجمان بد که احراز هویت را میشکانند و یا دیگر توابع(؟) مدیریتی نشست را اجازه میدهد تا به رمزها و کلیدها و توکن های نشست دسترسی داشته باشند. این ریسک در زیر مجموعه آسیب های احراز هویت و شناخت هویت در لیست 2021 لیست OWASP قرار میگیرد.Senstive Data Exposure:داده های حساس میتوانند توسط اپلیکیشن ها و یا API ها که حفاظت های درونی رضایت بخش ندارند، استخراج شود. برای داشتن امنیت قوی، اینکه مقداری امنیت برای انتقال یا بخشی از داده استفاده کنیم مهم است. داده های امن برای بازیگران مخرب جزئ از دسته اقلام با ارزش حساب میشود. که باعث میشود تا امنیت داده های دارای اهمیت باشد. داده دزدیده شده میتواند از طریق انجام دادن جرم، blackmailing، جرم های مربوط به هویت و فروخته شدن در وب تاریک شود. در سال 2021 این به زیر مجموعه cryptographic failures ادغام شد.XML External Entities (XXE):خطرات از این نوع حملات منجر به سواستفاده از مفسرهای XML میشود که برای حملات DDOS استفاده میشوند یا برای کارهای خطرناک دیگر استفاده میشوند. مفسرهای از مصرف گذشته و یا اشتباه تنظیم شده XML میتواند منجر به بازنشانی فایل های داخلی، اشتراک فایلها، port scanning داخلی و RCE (remote code execution) شود. از آنجایی که حملات XXE وابسته به تعاریف نوع سند (DTDs) که فعال هستند میشود، غیر فعال کردن آن هر زمان که ممکن باشد توصیه میشود. اگر غیرفعال کردن DTDs یک انتخاب نباشد، OWASP یک لیست جایگزین برای اینکار در نظر گرفته است (https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.md). در سال 2021 به زیر مجموعه security misconfiguration ادغام شد.Broken access control:این نوع ریسک شامل انواع گسترده ای از ریسک ها میشود که عمدتا خطراتی را که به مهاجمان اجازه میدهد تا محدودیت های اطراف دسترسی را شامل میشود بشکند. نمونه هایی از آن شامل حملات مخاطره آمیز سطح دسترسی، دور زدن کنترل های سطح دسترسی، و استفاده از Insecure direct object references در کنار بقیه میشود. مهاجمانی که در کنترل سطح دسترسی نفوذ میکنند میتوانند داده شخصی را بدزدند، اکانت کاربران را بربایند(؟)، حقوق کاربران را تغییر دهند، یا حرکات خطرناک بعدی صورت دهند.Security Misconfiguration:این نوع ریسک ها شامل انواع متدوال ریسک های امنیتی هستند که محیط وب را شامل میشوند. آنها معمولا شامل:بر روی یک اکانت ثابت بودن، رمزها، و یا تنظیمات است.پورتها و یا سرویسها و یا اکانت های دیگر را فعال قرار دادن.تنظیمات ناقص و یا از تاریخ گذشته امنیتینرم افزار از تاریخ گذشته و یا پچ نشدههدرهای misconfigure HTTPپیام های خطای که درباره سیستم پایه ای اطلاعات زیادی را منتشر میکند.جلوگیری از خطاهای امنیتی وابسته به امن کردن سیستم ها و نرم افزارها و پروسه ها است.Vulnerable and Outdated Components:استفاده از اجزا و ابزارهای پچ نشده و آپدیت نکرده یا دارای خطا در یک برنامه موجب میشود تا امنیت آن دچار خطا شود و در برابر حملات نرم آزاد قرار میدهد. این خطاها میتوانند در کتابخانه ها، چارچوب ها و ماژول های که دسترسی های یکسانی به پیدا میکند هنگامی که برنامه ها اجرا شوند. غیرفعال کردن پیش نیازها، استفاده فقط از اجزا قابل اطمینان، و دنباله روی از یک پروسه مدیریتی پچ شده امن سبب میشود که میزان خطرات شامل ریسک کاهش یابد.Security logging and monitoring failures:شناسایی سریع یک تله سبب میشود که آسیب به آن کمتر شود، ولی کمبود لاگ کردن و خطاهای مانیتورینگ سبب میشود که تلاش های امنیتی بیشتری را نشان میدهد. یافته ها بطور میانگین نشان میدهد که 228 روز طول میکشد تا شناسایی شود، و این کار به مهاجامان اجازه میدهد تا ضربه شدیدی وارد کنند. برنامه ها میتوانند با مطمئن قرار دادن این ریسک ها و زمانی که بصورت تمیز و کوتاه شده خطاها و یا هشدارها لاگ میشوند. این برنامه جز زیر مجموعه های مانیتورینگ و لاگ کردن ضعیف در سال 2017 به شمار میرود.Cryptographic Failures:این نوع خطاها زمانی رخ میدهند که داده های حساس و رمزها بصورت ناامن قرار گرفته اند. داده های حساس نیاز دارند تا بصورت رمز شده و یا hash شده هنگام انتقال و یا بخشی از آن باشند. بعنوان مثال رمزها باید بصورت hash شده قرار گرفته باشند بجای اینکه ساده قرار گرفته باشند، و داده های اطلاعاتی شخصی باید بصورت HTTPS باشند. اشتباه در محافظت کردن از داده های شخصی میتواند منجر شود که مهاجمان مرتکب جرم شوند، blackmail کنند، دزدی هویت کنند، یا جرایم دیگری را منجر شوند. شرکت ها میتوانند منجر شوند تا خطاهایی زیادی شکل گیرد همچون منتشر کردن داده های زیاد بدلیل GDPR اروپا و یا صنعت اقتصادی PCI-DSS. این بخش مربوط sensitive data exposure در سال 2017 میشود.Insecure Design:این یک موضوع جدید است که شامل پشتیبانی کردن خطرات بدلیل &quot;طراحی کنترلی ناقص باعث میشود&quot;. این با پیاده سازی ناقص که در آن طراحی ناقص نمیتواند بصورت کامل نمیتواند اجرا شود. طراحی های ناقص میتواند کنترل های امنیت های نیاز شود. یا که بصورت خطرات پترن های طراحی های امن و یا دنبال کردن مدل ها و تست های گسترده میشود.Software Data and Integrity Failures:اینکار منجر میشود به آپدیت های نرم افزاری میشود که، داده های حساس میشود، و پایپلاین های CI/CD میشود. این کار شامل میشود که برنامه ها که بر روی محتویات غیرامن یا سرویس هایی همچون کتابخانه ها، پلاگین ها، یا CDNها شود. این همچنین شامل insecure deserialization میشود (از 2017). که هنگامی که داده های سریال شده از یک فایل، سوکت های شبکه، یا جریان که بصورت ناامن به یک شی منتقل میشوند. این مشکلات میتوانند از طریق ریپوهای امن پیدا شوند، یا با تایید کردن پیشنیازها با تست کردن بسیار زیاد امنیتی باشد.Server Side Request Forgery:این نوع از ریسک ها شامل چک کردن یا بررسی کردن URL های از قبل بصورت اجزای ریموت دسترسی داشته باشند. مهاجمان میتوانند با exploit کردن این اپهای خطرناک برای فرستادن درخواست های ساخته شده برای URL های خطرناک شود، حتی با گذراندن فایروالها، VPN ها و لیستهای دسترسی کنترلها. این ریسک ها میتوانند با جز جز کردن شبکه، غیرفعال کردن redirect HTTP، و تمیز کردن لیست کاربران، و معیارهای دیگر بکار میرود.این لیست OWASP TOP 10 Web Application Security test list خیلی کامل بررسی کنید.امیدوارم از مطالبم خوشتون اومده باشه (این آخرشو سرهم کردم رفت ?) </description>
                <category>Arvin</category>
                <author>Arvin</author>
                <pubDate>Sat, 11 Dec 2021 21:17:01 +0330</pubDate>
            </item>
                    <item>
                <title>آسیب پذیری IDOR چیست؟</title>
                <link>https://virgool.io/@0xShervin/%D8%A2%D8%B3%DB%8C%D8%A8-%D9%BE%D8%B0%DB%8C%D8%B1%DB%8C-idor-%DA%86%DB%8C%D8%B3%D8%AA-ldcl2dwrqzzp</link>
                <description>تو این مقاله میخواهیم بطور خلاصه آسیب پذیری IDOR را توضیح دهیم. IDOR مخفف Insecure Direct Object Reference میباشد. این آسیب پذیری به مهاجم اجازه میدهد تا بدون داشتن اجازه به منابع دسترسی داشته باشد و یا اعمالی بر روی وب اپلیکیشن انجام دهد. این کار با تغییر دادن پارامترهای درخواستی هایی که به سمت سرور ارسال میشود تا بتوان چیزهایی همچون (اسناد، فایل ها و داده ها) را بدست آورد. این کار با نبود تاییدیه که سمت سرور است و یک درخواست بدون تایید این که این چیز متعلق به درخواست شخص باشد که درخواستی را میفرستد.این آسیب پذیری چگونه صورت میگیرد؟برای اینکه بتوانید این آسیب پذیری را پیدا کنید باید چشمانتان به ID ها باشد. به عنوان مثال فرض کنید که یک آدرس در سرویس های آنلاین بوجود آوردید و پروفایل شما از طریق آدرس زیر قابل دسترسی است: http://example.com/profile?user_id=100و اگر توانستید در این آدرس user_id را از 100 به 101 تغییر دهید (http://example.com/profile?user_id=101) و توانستید به آدرس پروفایل دیگری دسترسی داشته باشید در حقیقت توانسته اید یک آسیب پذیری IDOR پیدا کنید. البته باید توجه داشته باشید که همه ID ها بصورت ساده رمزنگاری نیستند و یا که به سادگی قابل فهم باشند. برخی از آنها بصورت Hash شده قرار گرفته اند. در این مرحله ممکن است از خود بپرسید که &quot;اگر نمیتوانید مقدار ID را متوجه شوید، پس چگونه میتوانید با کنترل آن آسیب پذیری IDOR پیدا کنید؟&quot; خب خبر خوب این است که شما میتوانید مقدار را رمزشکنی و رمزنگاری کنید. :)بعنوان مثال فرض کنید که url با مقدار http://example.com/profile?user_id=100 آغاز میشود، ولی بجای این url مقدار http://example.com/profile?user_id=MTAw وجود دارد. این یک مثال از رمز نگاری کد base64 است. گرفتن مقدار MTAw و تبدیل این مقدار به مقدار دیگر که بوسیله ابزاری همچون https://www.base64decode.org صورت گرفته، مقدار را بصورت اصلی که همان 100 است نشان میدهد. سپس با استفاده از ابزار https://www.base64decode.org و رمزنگاری مقدار 101 و با دوباره درخواست وب فرستادن امکانش هست ببینید که این آسیب پذیری وجود دارد یا خیر.آسیب پذیری IDOR در چندین جا امکان دارد دارد یافت شود. ما تا به الان یک مکان برای یافتن آن را پیدا کردیم که آن هم میتواند در address bar باشد. مکان های دیگری که میتوان این آسیب پذیری را پیدا کرد با نگاه کردن به محتوای فرم های HTML در یک وبسایت است. در عکس بالا، یک درخواست به سمت سرور فرستاده میشود که برای آپدیت کردن پسورد استفاده میشود. با تغییر دادن مقدار &quot;name&quot; و &quot;value&quot; و با دوباره تایید کردن آن و فرستادن آن به سرور به شما امکان این را میدهد تا user و password اکانت دیگر را تغییر داده و آنرا set کنید.همچنین ممکن است این آسیب پذیری را در cookie ها هم پیدا کنید. معمولا کوکی ها برای این استفاده میشوند که ID های session در آنها نگهداری شود ولی گاهی اوقات توسعه دهندگان اشتباهاً ID کاربر را ذخیره میکنند. تغییر دادن این مقدار میتواند اطلاعات کاربری دیگری را نشان دهد. برای اینکار هم میتوانید از developer tools مرورگر استفاده کنید تا اطلاعات کوکی ها و درخواست های HTTP را تغییر داده و مشاهده کنید.برای حل تمرین های این بخش هم میتوانید از سایت https://portswigger.net/web-security/access-control/idor  استفاده کنید!!! در آخر دوست دارم نظر شما رو در رابطه با این آسیب پذیری بدونم. ??این مقاله صرفا ترجمه از سایت medium که توسط کاربر @kaorrosi نوشته شده در آدرس زیر قابل مشاهده هم است: https://medium.com/@kaorrosi/what-is-an-idor-vulnerability-7af668b6a0a6</description>
                <category>Arvin</category>
                <author>Arvin</author>
                <pubDate>Mon, 06 Dec 2021 18:58:14 +0330</pubDate>
            </item>
                    <item>
                <title>توضیح مفهوم SSO در ساختار application ها</title>
                <link>https://virgool.io/@0xShervin/%D8%AA%D9%88%D8%B6%DB%8C%D8%AD-%D9%85%D9%81%D9%87%D9%88%D9%85-sso-%D8%AF%D8%B1-%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1-application-%D9%87%D8%A7-ltk270kmxppa</link>
                <description>تو این مقاله بطور خلاصه میخواهیم درباره ساختار SSO (Single Sign-On) حرف بزنیم. SSO یک روش احراز هویت است که به کاربران این قابلیت را میدهد تا بصورت امن با چندین application و وب سایت با یک گواهینامه خاص احراز هویت کنیم. توضیح مختصر این مفهوم اینگونه است که SSO  با یک ارتباط مطمئن بین یک اپلیکیشن که بعنوان یک ارائه دهنده سرویس است و یک ارائه دهنده هویت همانند OneLogin قرار میگیرد. این اطمینان رابطه از آنجا نشات میگیرد که این هویت بین identity provider و service provider جابجا میشود. این گواهینامه میتواند برای امضا کردن اطلاعاتی که از سمت identity provider به service provider باشد که این باعث میشود service provider بفهمد که این گواهینامه از منبع مطمئن آمده است. در SSO، این داده هویت از یک توکن که دارای بیت های هویتی از اطلاعاتی است درباره کاربر همچون آدرس ایمیل کاربر و نام کاربری آن.یک ورودی کلی عمدتا بصورت زیر بررسی میشود:- کاربر به صفحه یا وبسایتی که میخواهد دسترسی داشته باشد دست پیدا میکند، که بعنوان service provider آن را میشناسیم.- در این قسمت service provider یک توکن شامل اطلاعاتی (همچون آدرس ایمیل) به سیستم SSO میفرستد که ما را آنرا بعنوان Identity provider میشناسیم، که این بخشی از پاسخی تا کاربر را احراز هویت کند.- در ابتدا Identity provider بررسی میکند که آیا تا به حال کاربر احراز هویت کرده است یا خیر، که در این صورت به کاربر اجازه میدهد تا به اپلیکیشن service provider دسترسی داشته باشد و آن را به مرحله 5 میبرد.- اگر که کاربر هنوز وارد نشده است، مجبوراند تا گواهینامه که توسط identity provider نیاز است را ارائه دهند. این گواهینامه میتواند بصورت username و password باشد یا حتی میتواند شامل انواع مختلف دیگری از احراز هویت مانند One-Time Password (OTP) باشد.- هنگامی که Identity provider گواهینامه ارائه شده را تایید کند، یک توکن به service provider میفرستد که احراز هویت موفق را تایید میکند.- این توکن از سمت مرورگر کاربر به سمت Service Provider فرستاده میشود.- توکنی که توسط service provider دریافت میشود از طریق یک ارتباط مطمئن تایید میشود که این بین service provider و Identity provider در هنگام راه اندازی تنظیمات اولیه اتفاق می افتد.- کاربر اجازه دستیابی به Service provider را پیدا میکند.  شماتیکی از SSO هنگامی که کاربر تلاش میکند تا به وبسایت مختلفی دسترسی داشته باشد، سایت جدید باید حتما یک رابطه مطمئن SSO تنظیم کرده باشد و این جریان احراز هویت از قدم های یکسانی پیروی میکند.توکن SSO چیست؟توکن SSO شامل اطلاعاتی است که از یک system به system دیگری در عملیات SSO انتقال داده میشود. این اطلاعات بصورت ساده میتوانند شامل آدرس ایمیل و اطلاعاتی شامل اینکه چه سیستمی توکن را ارسال میکند باشد.توکن ها بصورت دیجیتالی میتوانند امضا شوند تا تایید شود که ببینیم از چه منبع مطمئنی آمده اند. گواهینامه ای که برای این امضای دیجیتالی بکار میرود در فرایند تنظیمات اولیه اتفاق میافتد.سوالی که پیش می آید این است آیا SSO امن است؟این کاملا بستگی به شرایط خاص خود دارد.دلایل زیادی وجود دارد که SSO میتواند امنیت را ارتقا دهد. single sign-on (sso) میتواند نام کاربری و مدیریت رمزها را برای کاربران و مدیران ساده کند. کاربران دیگر نیازی نیست به دنبال مجموعه های مختلفی از گواهینامه ها باشند و خیلی راحت میتوانند به یاد بیاورند که یک رمز پیشرفته چیست. SSO این به کاربران این اجازه را میدهد تا به application ها سریع تر دسترسی داشته باشند.راه حل SSO هم اشکالاتی دارد. بعنوان مثال، امکان دارد که application هایی باشد که پایین آمده اند. به همین دلیل مهم است که فاکتور های احراز هویت بیشتری نیاز باشد، قبل از اینکه کاربر  به یک اپلیکیشن خاص وارد شود یا از دسترسی کاربران به یک اپلیکیشن جلوگیری میکند مگر اینکه به شبکه امن متصل باشند.راه حل SSO چگونه اجرا میشود؟اینکه چند گام استثنایی برداشته اید مهم نیست ولی باید اهداف و جزییات را برای اجرا کردن هدف خود مشخص کردید. برای اینکار به سوالات زیر پاسخ دهید:- چند نوع مختلف از کاربران را هندل میکنید و نیازهای مختلف آنها چیست؟- آیا دنبال یک راه حل On Prem هستید یا راه حل مبتنی بر Cloud؟- آیا این راه حل میتواند با نیازهای شما و شرکت شما افزایش یابد؟- آیا نیاز به دسترسی API دارید؟انواع مختلف SSO را در زیر آورده ایم:انواع مختلفی SSO وجود دارد:- Federated Identity Management- OAuth (specifically OAuth 2.0 nowadays)- OpenID Connect(OIDC)- Security Access Markup Language (SAML)- Same Sign On (SSO)در آخر هم به مباحث مهمی پرداختیم همچون اینکه چرا Single Sign-On مهم است؟ Single Sign-on چیست؟ و ...خلاصه ای از سایت https://www.onelogin.com/learn/how-single-sign-on-works</description>
                <category>Arvin</category>
                <author>Arvin</author>
                <pubDate>Sun, 28 Nov 2021 22:48:38 +0330</pubDate>
            </item>
            </channel>
</rss>