$lang['tuto'] = "سبق"; ?>$lang['tuto'] = "سبق"; ?>$lang['tuto'] = "سبق"; ?> جاوا اسکرپٹ ویب ورکرز اور Stripe.js

جاوا اسکرپٹ ویب ورکرز اور Stripe.js کے ساتھ مواد کی حفاظتی پالیسی کے مسائل کو حل کرنا

Stripe

Stripe.js کے ساتھ CSP کی خرابیوں کو سمجھنا اور درست کرنا

تیسری پارٹی کی لائبریریوں کو ضم کرنا جیسے ویب ایپلیکیشنز میں آنا بعض اوقات مشکل ہو سکتا ہے، خاص طور پر حفاظتی پالیسیوں کے ساتھ۔ حال ہی میں، ڈویلپرز کے ساتھ کام کر رہے ہیں ویب ورکرز اور بلاب: URLs کی وجہ سے Stripe.js استعمال کرتے وقت ترتیبات کو ایک غیر معمولی غلطی کا سامنا کرنا پڑا۔

سی ایس پی کی یہ مخصوص خرابی—بلاب یو آر ایل سے کارکن بنانے سے انکار— اس لیے ہوتی ہے کیونکہ ڈیفالٹ CSP پالیسی اس بات پر پابندی لگاتی ہے کہ اسکرپٹس اور ورکرز جیسے وسائل کیسے بنائے جا سکتے ہیں۔ یہ ایک حفاظتی اقدام ہے، لیکن یہ ان خدمات کو مربوط کرتے وقت غیر متوقع مسائل کا باعث بن سکتا ہے جنہیں ان پالیسیوں کو وسعت دینے کی ضرورت ہے۔

ایک مثال مقامی ترقی کے ماحول میں ہے۔ آپ اپنی ایپ ترتیب دے سکتے ہیں، Stripe's API کو لنک کر سکتے ہیں، اور لین دین کی جانچ کے لیے تیار ہو سکتے ہیں۔ لیکن ہموار لوڈنگ کے بجائے، کنسول آپ کے ورکر اسکرپٹس کو مسدود کرنے میں ایک خرابی پھینک دیتا ہے۔ 🛠️

اگر آپ سوچ رہے ہیں کہ کس طرح ترتیب دیں۔ اسٹرائپ کے اسکرپٹس کو مسدود کرنے سے بچنے کے لیے محفوظ طریقے سے، آپ اکیلے نہیں ہیں۔ بہت سے ڈویلپرز نے اس مسئلے کا عملی حل تلاش کرنے کے لیے جدوجہد کی ہے۔ یہ سمجھنے کے لیے ایک گائیڈ ہے کہ آپ کی ایپ کو سیکیورٹی کے خطرات سے محفوظ رکھتے ہوئے مسئلہ کی وجہ کیا ہے اور اسے کیسے حل کیا جائے۔ 🔐

حکم استعمال کی مثال
helmet.contentSecurityPolicy Node.js میں ایک مڈل ویئر فنکشن سیٹ کرنے کے لیے استعمال ہوتا ہے۔ ہیڈرز یہ مختلف وسائل جیسے اسکرپٹ-src اور worker-src کے لیے حسب ضرورت CSP ہدایات کو ترتیب دینے کی اجازت دیتا ہے تاکہ یہ یقینی بنایا جا سکے کہ صرف بھروسہ مند ذرائع ہی لوڈ کیے گئے ہیں۔
defaultSrc یہ CSP ہدایت نامہ وسائل کو لوڈ کرنے کے لیے ایک طے شدہ پالیسی کی وضاحت کرتا ہے جب ایک مخصوص ہدایت (جیسے اسکرپٹ-src) کی وضاحت نہیں کی گئی ہے۔ ان مثالوں میں، یہ وسائل کو لوڈ کرنے کو صرف بھروسہ مند ڈومینز تک محدود کرتا ہے، فال بیک سیکیورٹی پرت فراہم کرتا ہے۔
worker-src ایک CSP ہدایت خاص طور پر اجازت دیتا ہے۔ مخصوص ذرائع سے لوڈ کرنے کے لیے۔ یہ اس بات کو یقینی بناتا ہے کہ ورکر اسکرپٹس صرف خود یا بلاب: یو آر ایل کی اجازت سے لوڈ ہوتی ہیں، جو اسٹرائپ کے ویب ورکر کی فعالیت کے لیے ضروری ہے۔
supertest ایک Node.js لائبریری HTTP درخواستوں کو جانچنے کے لیے استعمال ہوتی ہے۔ . یہاں، یہ تصدیق کرنے کے لیے استعمال کیا جاتا ہے کہ CSP ہیڈر درخواستیں بھیج کر اور ہیڈرز کی تصدیق کر کے درست طریقے سے سیٹ کیے گئے ہیں۔
expect().to.include() چائی لائبریری کا ایک ٹیسٹ اسسرشن فنکشن، یہاں اس بات کی تصدیق کے لیے استعمال کیا جاتا ہے کہ آیا CSP ہیڈر میں کوئی مخصوص ہدایت (جیسے worker-src) شامل ہے۔ اس سے یہ یقینی بنانے میں مدد ملتی ہے کہ CSP پالیسیاں درست طریقے سے لاگو اور جانچ کی گئی ہیں۔
res.headers['content-security-policy'] یہ کمانڈ تک رسائی حاصل کرتا ہے۔ ایکسپریس میں جوابی آبجیکٹ سے براہ راست۔ یہ چیک کرنے کے لیے استعمال کیا جاتا ہے کہ آیا ہیڈر کنفیگریشن میں محفوظ کارکن اور اسکرپٹ لوڈنگ کے لیے ضروری ہدایات شامل ہیں۔
script-src ایک CSP ہدایت جو JavaScript فائلوں کے لیے اجازت شدہ ذرائع کی وضاحت کرتی ہے۔ سیکیورٹی کے لیے، یہ یقینی بناتا ہے کہ مخصوص ڈومینز (جیسے اسٹرائپز) سے صرف اسکرپٹ کو ہی عمل میں لایا جا سکتا ہے، جس سے روکنے میں مدد ملتی ہے۔ حملے
'self' ایک CSP کلیدی لفظ جو وسائل کو صرف سائٹ کی اپنی اصلیت سے لوڈ کرنے کے لیے استعمال کیا جاتا ہے۔ یہ مطلوبہ لفظ بیرونی ذرائع کو محدود کرتا ہے، ایک مضبوط حفاظتی بنیاد فراہم کرتا ہے جبکہ ضروری، مقامی طور پر میزبان وسائل کی اجازت دیتا ہے۔
blob: CSP میں اسکیم کا کلیدی لفظ جو قابل بناتا ہے۔ عام طور پر ویب ورکرز یا براؤزر میں تیار کردہ میڈیا فائلوں کے لیے استعمال کیا جاتا ہے۔ بلاب سمیت: ورکر-ایس آر سی مقامی ترقی میں کارکنوں کے لیے محفوظ، متحرک وسائل کو سنبھالنے کی اجازت دیتا ہے۔
describe() موچا کا ایک فنکشن ٹیسٹ کیسز کو گروپ اور لیبل کرنے کے لیے استعمال کیا جاتا ہے، جس سے ٹیسٹ سویٹس زیادہ پڑھنے کے قابل اور منظم ہوتے ہیں۔ اس مثال میں، یہ سی ایس پی ہیڈرز کے لیے ٹیسٹوں کو سمیٹتا ہے، سیکیورٹی کنفیگریشنز کی جانچ میں وضاحت کو یقینی بناتا ہے۔

Stripe.js ویب ورکرز کے لیے محفوظ CSP سیٹنگز کو نافذ کرنا

پہلا اسکرپٹ ایک محفوظ سیٹ اپ کرتا ہے۔ HTML میں براہ راست میٹا ٹیگ کا استعمال، CSP مسائل کے ساتھ کام کرنے والے فرنٹ اینڈ ڈویلپرز کے لیے ایک سیدھا سا طریقہ۔ یہ اسکرپٹ خاص طور پر شامل کرتا ہے۔ ہدایت، جو ویب ورکرز اور بلاب یو آر ایل کے استعمال کی اجازت دیتا ہے۔ ایسا کرنے سے، ہم اسٹرائپ کو اپنے ویب ورکرز کو سیکیورٹی پالیسیوں کی خلاف ورزی کیے بغیر چلانے کے قابل بناتے ہیں۔ یہ نقطہ نظر آسان فرنٹ اینڈ پروجیکٹس کے لیے مفید ہے جہاں ایچ ٹی ایم ایل کی سطح پر سی ایس پی ہیڈرز کا انتظام تیز اور موثر دونوں ہوتا ہے، خاص طور پر ترقی کے دوران۔ 🌐

دوسری اسکرپٹ میں، ایک زیادہ جامع حل Node.js کو Express.js فریم ورک کے ساتھ استعمال کرتا ہے تاکہ HTTP ہیڈر کے ذریعے CSP کو ترتیب دیا جا سکے۔ یہاں، دی پیکیج کو اپنی مرضی کے مطابق CSP ہیڈر کو متحرک طور پر سیٹ کرنے کے لیے لاگو کیا جاتا ہے۔ یہ اسکرپٹ بیک اینڈ انٹیگریشن والے پروجیکٹس کے لیے موزوں ہے، جہاں CSP پالیسیوں کو تمام صفحات کے لیے مستقل طور پر نافذ کیا جانا چاہیے۔ اس طریقہ کو استعمال کرنے کا فائدہ لچک ہے؛ یہ CSP کنفیگریشن کو سنٹرلائز کرتا ہے تاکہ ایڈجسٹمنٹ تمام اینڈ پوائنٹس پر لاگو ہوں۔ مثال کے طور پر، اگر آپ کی ایپ مزید تھرڈ پارٹی ٹولز کو بڑھاتی یا انٹیگریٹ کرتی ہے، تو آپ ہیلمٹ کی کنفیگریشن کے ذریعے آسانی سے ہیڈرز میں ترمیم کر سکتے ہیں، جس سے آپ کی ویب ایپلیکیشن میں سیکیورٹی کو برقرار رکھنے میں مدد ملتی ہے۔

تیسرے اسکرپٹ میں شامل ہے۔ Mocha اور Chai لائبریریوں کا استعمال اس بات کی تصدیق کرنے کے لیے کہ CSP ہیڈر درست طریقے سے ترتیب دیے گئے ہیں۔ جانچ کی یہ سطح خاص طور پر مستقبل کی غلطیوں کو پیداوار میں ظاہر ہونے سے روکنے کے لیے قابل قدر ہے۔ اس میں اس بات کو یقینی بنانے کے دعوے شامل ہیں کہ ہدایات پسند کریں۔ اور ہیڈرز میں موجود ہیں۔ مسلسل انٹیگریشن پائپ لائن کے حصے کے طور پر ان ٹیسٹوں کو چلانا یقینی بناتا ہے کہ CSP کنفیگریشن موثر اور محفوظ رہے یہاں تک کہ کوڈ تیار ہوتا ہے۔ مثال کے طور پر، ایک ڈویلپر نئی اسکرپٹس کو شامل کرنے کے لیے ایپ میں ترمیم کر سکتا ہے، لیکن CSP کو اپ ڈیٹ کیے بغیر۔ یہ ٹیسٹ تعیناتی سے پہلے ایسی غلط کنفیگریشنز کو پکڑیں ​​گے۔ 🛡️

مجموعی طور پر، ہر نقطہ نظر منصوبے کی پیچیدگی کے لحاظ سے مختلف فوائد لاتا ہے۔ ایچ ٹی ایم ایل پر مبنی سی ایس پی کنفیگریشن سیدھی اور تیز ہے چھوٹے، صرف فرنٹ اینڈ پراجیکٹس میں لاگو کرنے کے لیے۔ ہیلمٹ کے ساتھ Express.js سرور سائیڈ CSP کنفیگریشن بڑی ایپلی کیشنز کے لیے بہترین ہے جن کے لیے بیک اینڈ انٹیگریشن اور سینٹرلائزڈ سیکیورٹی پالیسیوں کی ضرورت ہوتی ہے۔ آخر میں، یونٹ ٹیسٹ مسلسل ترقی کی مشق کرنے والی ٹیموں کے لیے سیکیورٹی کی ایک مضبوط پرت کا اضافہ کرتے ہیں، اس بات کو یقینی بناتے ہوئے کہ ہر تعیناتی کی تکمیل ہوتی ہے۔ . ہر اسکرپٹ بالآخر CSP کی ضروریات کو مؤثر طریقے سے حل کرتے ہوئے Stripe کی ویب ورکر فعالیت کے محفوظ استعمال کو قابل بناتا ہے۔

حل 1: اسٹرائپ ویب ورکرز کے لیے مواد کی حفاظتی پالیسی (CSP) کو ترتیب دینا

یہ حل زیادہ لچکدار CSP سیٹ اپ کے لیے HTML اور میٹا ٹیگز کا استعمال کرتے ہوئے فرنٹ اینڈ کنفیگریشن کا اطلاق کرتا ہے۔

<!-- Setting CSP in meta tag for worker-src -->
<meta http-equiv="Content-Security-Policy"
      content="default-src 'self'; script-src https://js.stripe.com;
      style-src 'self' 'unsafe-inline';
      worker-src 'self' blob: https://m.stripe.network;">
<!-- End of meta tag -->
<script src="https://js.stripe.com/v3/"></script>
<!-- The remaining HTML code -->
<form action="">
  <label for="">Label</label>
  <input type="text" name="" id="">
</form>
<script>
  // Initializing Stripe with a test key
  const stripe = Stripe('pk_test_---');
</script>

حل 2: بیک اینڈ میں HTTP ہیڈر کے ساتھ CSP کو ترتیب دینا

یہ حل بیک اینڈ سیکیورٹی کے نفاذ کے لیے Express.js کا استعمال کرتے ہوئے HTTP ہیڈر کے ذریعے CSP کو ترتیب دیتا ہے۔

// Importing required modules
const express = require('express');
const helmet = require('helmet');
const app = express();
// Setting custom CSP headers
app.use(helmet.contentSecurityPolicy({
  directives: {
    defaultSrc: ["'self'"],
    scriptSrc: ["'self'", "https://js.stripe.com"],
    styleSrc: ["'self'", "'unsafe-inline'"],
    workerSrc: ["'self'", "blob:", "https://m.stripe.network"],
  }
}));
// Serve static files or other routes
app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});
// Running the server
app.listen(3000, () => console.log('Server running on port 3000'));

حل 3: ان لائن یونٹ ٹیسٹ کے ساتھ CSP کنفیگریشن

یہ نقطہ نظر Mocha اور Chai کے ذریعے CSP کی ترتیبات کی تصدیق کے لیے Node.js ماحول کا استعمال کرتا ہے۔

// Import necessary modules
const { expect } = require('chai');
const supertest = require('supertest');
const app = require('../app'); // Express app
describe('CSP Headers Test', () => {
  it('should include worker-src directive with blob:', async () => {
    const res = await supertest(app).get('/');
    const csp = res.headers['content-security-policy'];
    expect(csp).to.include("worker-src 'self' blob: https://m.stripe.network");
  });
  it('should include script-src for Stripe', async () => {
    const res = await supertest(app).get('/');
    const csp = res.headers['content-security-policy'];
    expect(csp).to.include("script-src https://js.stripe.com");
  });
});

Stripe.js کے ساتھ محفوظ ویب ورکر انٹیگریشن کے لیے CSP پالیسیوں کو بہتر بنانا

کا ایک ضروری پہلو مخصوص وسائل کی اقسام کو منتخب طور پر اجازت دینے یا محدود کرنے کی صلاحیت ہے، بشمول کے ذریعے ہدایت ویب ڈویلپمنٹ میں، CSP پالیسیاں ایپلیکیشنز کو بدنیتی پر مبنی مواد کے انجیکشن اور کراس سائٹ اسکرپٹنگ (XSS) حملوں سے بچانے کے لیے تیزی سے اہم ہو گئی ہیں۔ اس صورت میں، انضمام Stripe.js محفوظ ادائیگیوں کے لیے CSP میں ایڈجسٹمنٹ کی ضرورت ہوتی ہے جو اسٹرائپ کے ورکر اسکرپٹس کو ایک سے لوڈ کرنے کی اجازت دیتی ہے۔ URL، صفحہ پر نافذ حفاظتی اقدامات سے سمجھوتہ کیے بغیر۔ اجازت دے رہا ہے۔ فار سٹرائپ دیگر اہم وسائل کی حفاظت کرتے ہوئے ضروری اسکرپٹس کو قابل بناتا ہے۔

جس طرح سے CSP ویب ورکرز کے ساتھ کام کرتا ہے وہ انتہائی اہم ہے۔ پہلے سے طے شدہ طور پر، اگر a ہدایت غیر حاضر ہے، CSP استعمال کرنے پر واپس آ جائے گا۔ فال بیک کے طور پر ترتیب دینا، جو غلطیاں پیدا کر سکتا ہے، خاص طور پر جدید ویب لائبریریوں جیسے اسٹرائپ کے ساتھ جو اپنے وسائل کو لوڈ کرنے کے لیے بلاب پر مبنی ویب ورکرز کا استعمال کرتی ہیں۔ یہ ہے جہاں کی ترتیب شامل کرنے کی ہدایت blob: URLs اہم ہو جاتا ہے۔ ورکر پالیسیوں کی واضح طور پر وضاحت کر کے، ڈویلپرز سیکورٹی کی خرابیوں سے بچ سکتے ہیں اور Stripe.js کے ہموار انضمام کو یقینی بنا سکتے ہیں۔ جیسا کہ ڈویلپرز ورکر پر مبنی لائبریریوں یا دیگر APIs کو لاگو کرتے ہیں، CSP کنفیگریشنز اسکرپٹ کی اجازتوں کو کنٹرول کرنے اور غیر بھروسہ مند ذرائع کی نمائش کو محدود کرنے میں مدد کر سکتی ہیں۔

یہ بات قابل غور ہے کہ CSP کی لچک مختلف ذرائع کو مختلف ہدایات کے تحت اجازت دینے کی اجازت دیتی ہے، جیسے ، ، اور . یہ ماڈیولرٹی وسائل کی ہر قسم پر دانے دار کنٹرول فراہم کرتی ہے، ضروری انضمام کو ایڈجسٹ کرتے ہوئے سیکورٹی کو بہتر بناتی ہے۔ مثال کے طور پر، جب کوئی ای کامرس پلیٹ فارم Stripe.js کو ضم کرتا ہے، تو انہیں نہ صرف ادائیگی کے عمل کے لیے سیکیورٹی کا انتظام کرنا چاہیے بلکہ اس بات کو بھی یقینی بنانا چاہیے کہ ان کی CSP ترتیبات محفوظ ادائیگیوں کے لیے درکار JavaScript لائبریریوں اور APIs کے ساتھ مطابقت رکھتی ہوں۔ فائن ٹیوننگ کے ذریعے worker-src اور کنفیگریشنز کی سختی سے جانچ کرتے ہوئے، ڈویلپرز ایک مضبوط حفاظتی ماحول بناتے ہیں جو حساس ڈیٹا کی حفاظت کرتے ہوئے فریق ثالث کے انضمام کو سپورٹ کرتا ہے۔ 🔐

  1. کیا کرتا ہے CSP میں کرتے ہیں؟
  2. دی سی ایس پی میں ہدایت خاص طور پر ان ذرائع کو محدود کرتی ہے جہاں سے ویب ورکرز کو لوڈ کیا جا سکتا ہے، جس سے یہ کنٹرول کیا جاتا ہے کہ اسکرپٹس کو صفحہ پر کیسے عمل میں لایا جاتا ہے۔
  3. کیوں ہے a Stripe.js کے لیے URL کی ضرورت ہے؟
  4. اکثر ویب ورکرز استعمال کرتے ہیں، جس سے لوڈ ہوتے ہیں۔ URLs کے تحت ان URLs کی اجازت دے رہا ہے۔ سٹرائپ کو ایک محفوظ CSP فریم ورک کے اندر مؤثر طریقے سے چلانے میں مدد کرتا ہے۔
  5. کیسے کرتا ہے سے متعلق ?
  6. اگر متعین نہیں ہے، CSP ڈیفالٹ کرتا ہے۔ . لیکن اسٹرائپ جیسی لائبریریوں کے لیے، وضاحت کرنا کے ساتھ blob: غلطیوں کو روک سکتا ہے۔
  7. سی ایس پی کیا سیکورٹی فوائد لاتا ہے؟
  8. پالیسیاں غیر مجاز اسکرپٹس اور وسائل سے حفاظت کرتی ہیں، ان کے خلاف مضبوط دفاع فراہم کرتی ہیں۔ حملے اور صارف کے ڈیٹا کی حفاظت۔
  9. کیا سی ایس پی کو براہ راست HTTP ہیڈر میں سیٹ کیا جا سکتا ہے؟
  10. ہاں، HTTP ہیڈر میں CSP کو ترتیب دینا، اکثر مڈل ویئر جیسے کے ساتھ Express.js میں، مرکزی، ایپلیکیشن وسیع CSP نفاذ کی اجازت دیتا ہے۔
  11. کیوں استعمال کریں۔ Express.js میں؟
  12. Node.js ماحول میں محفوظ CSP کنفیگریشنز کی اجازت دیتا ہے، جس سے ڈویلپرز کو پالیسیوں کی وضاحت اور نفاذ میں لچک ملتی ہے۔
  13. شامل کر رہا ہے۔ کو محفوظ؟
  14. جب مخصوص لائبریریوں جیسے Stripe.js کے لیے ضرورت ہوتی ہے، شامل کرنا کو سیکیورٹی پر سمجھوتہ کیے بغیر ضروری وسائل کی اجازت دینے کا ایک کنٹرول شدہ طریقہ ہو سکتا ہے۔
  15. سی ایس پی ای کامرس میں سیکیورٹی کو کیسے بہتر بناتا ہے؟
  16. CSP کے لیے ضروری ہے۔ کیونکہ یہ ناقابل اعتماد اسکرپٹس پر پابندی لگاتا ہے اور صارف کے حساس ڈیٹا کی حفاظت کرتا ہے، جس سے دھوکہ دہی یا ڈیٹا لیک ہونے سے بچنے میں مدد ملتی ہے۔
  17. میں اپنی CSP سیٹنگز کی جانچ کیسے کر سکتا ہوں؟
  18. جیسے ٹیسٹ فریم ورک کا استعمال اور ، ڈیولپرز درست پالیسیوں کا اطلاق یقینی بنانے کے لیے CSP کی ترتیبات چیک کر سکتے ہیں۔
  19. کیا CSP کی غلطیوں کو لاگ کرنا ممکن ہے؟
  20. ہاں، CSP سپورٹ کرتا ہے۔ خلاف ورزیوں کو لاگ اور مانیٹر کرنے کی ہدایات، جو ڈیولپرز کو حفاظتی مسائل کا جلد پتہ لگانے اور حل کرنے میں مدد کرتی ہے۔

انتظام کرنا فریق ثالث کی خدمات جیسے اسٹرائپ کے لیے سیٹنگز کو سیکورٹی کو کم کیے بغیر غلطیوں کو روکنے کے لیے سوچ سمجھ کر ترتیب کی ضرورت ہوتی ہے۔ بیان کر کے اور اجازت دیتا ہے یو آر ایل، ڈویلپرز اسٹرائپ کے ویب ورکرز کے ساتھ مطابقت حاصل کر سکتے ہیں۔

آپ کے HTML یا سرور کوڈ میں CSP ایڈجسٹمنٹ کو شامل کرنا درخواست کے پیمانے کی بنیاد پر لچک فراہم کرتا ہے۔ ڈیولپرز اس کے ذریعے CSP کو مزید تقویت دے سکتے ہیں۔ محفوظ انضمام کی تصدیق کرنے کے لیے، اسٹرائپ کے ویب ورکرز کو صارف کے تجربے میں خلل ڈالے بغیر محفوظ طریقے سے کام کرنے کی اجازت دیتا ہے۔ 🔐

  1. مواد کی حفاظتی پالیسی (CSP) کی ہدایات اور براؤزر کی مطابقت سے متعلق دستاویزات، محفوظ پالیسیاں ترتیب دینے کے لیے رہنمائی فراہم کرتی ہیں: CSP پر MDN ویب دستاویزات
  2. Stripe.js کو ترتیب دینے اور ویب ورکرز کے لیے CSP کی ضروریات کو سنبھالنے کے بارے میں تفصیلی معلومات: Stripe.js دستاویزات
  3. سی ایس پی سمیت محفوظ HTTP ہیڈر ترتیب دینے کے لیے ایکسپریس میں ہیلمٹ استعمال کرنے کے لیے ایک جامع گائیڈ: Helmet.js آفیشل سائٹ
  4. Node.js ماحول کے اندر HTTP ہیڈر اور CSP سیٹنگز کی جانچ کے لیے گائیڈ، کنفیگریشنز کی توثیق کے لیے فائدہ مند: چائی اسسرشن لائبریری