@dovid
JS:
https://1loc.dev/
https://javascript.plainenglish.io/20-javascript-shorthand-techniques-that-will-save-your-time-f1671aab405f
https://www.30secondsofcode.org/
https://github.com/trekhleb/javascript-algorithms
CSS:
https://csslayout.io/
bash\shell
https://linuxcommand.org/
אבטחת מידע:
https://github.com/riramar/Web-Attack-Cheat-Sheet
https://cyber-eliya.com/ (בעברית)
זה מה שכרגע נזכרתי או שמרתי ממה שראיתי בעבר, אם יהיה עוד אשתדל לשתף.
5566brs
-
בקשה להמלצות על ערוצים/סרטונים של תכנות והמסתעף -
CSS - הדפסת דף אינטרנט עם דפים בגדלים שונים@yossiz אמר בCSS - הדפסת דף אינטרנט עם דפים בגדלים שונים:
לפי ה-spec הזה (שהוא עדיין טיוטה - working draft) אמור להיות אפשרי לעשות משהו כזה:
<p style='page: p1;'>page1</p> <p style='page: p2;'>page2</p>
@page p1 { size: A4; } @page p2 { size: A5; }
אך עד כמה שהצלחתי להבין, בינתיים אין שום דפדפן שתומך בזה...
זה התחיל לעבוד בכרום.
דוגמה:
multiple-sizes-in-print.htmlאפשר גם לשנות את השוליים בהתאם לגודל כל דף.
-
איך לבנות שרת מיילים?שרת מיילים ששולח או שמקבל?
לשולח - כמה טיפים שיעזרו:
בדוק שיש לו אפשרות להוציא תקשורתמפורט 25.. (תיקון טעות: אל פורט 25).
אם אין לדומיין שבשמו אתה שולח רשומת ptr, גוגל ידחו שליחה אליהם עוד בשלב המגעים עם השרת שלהם.
כדאי לדאוג להגדיר spf, dkim, dmark כראוי (רשומת TXT עם הגדרות הIP/דומיין שמורשה לשלוח וכדו', מפתח פומבי שמור ברשומתTXT בתוך סאב דומיין ייחודי וחתימה של המייל עם המפתח הפרטי, רשומת TXT עם הגדרות מי מקבל דיווח על הפרה של הרשאות, בהתאמה).
זה הבסיס, יש עוד המון טריקים שיכולים לעזור בהרבה כיוונים.למקבל נדרשת רשומת MX בלבד, ואם היעד ברשומה הוא גם באחריותך, צריך שרת שיאזין.
מה בדיוק תעשה עם המייל שאתה מקבל?
תשמור אותו? באיזה פורמט? איך תקרא אותו?
סתם רשימת דברים שכדאי לחשב מראש.עריכה: לשרת מקבל יש גם צורך בתעודת SSL תקינה, אם רוצים לתמוך בהצפנה סטנדרטית (לשרת שולח אין שום צורך בSSL, להבדיל מDKIM שהוא תעודת פומבית אבל אינה צריכה חתימה מגורם חיצוני).
-
פוסט שיתוף תוכן | יישום רשימה שחורה בשרתי node.jsלא מזמן נתקלתי בתכונה חמודה שנוספה לאובייקט net - המודול המובנה בnode.js לטיפול בתעבורת רשת.
האובייקט שנוסף נקרא BlockList, והוא מאפשר לשמור ולעדכן (באופן חד-כיווני) רשימה "שחורה" של מספרי IP או טווח של מספרים כאלו, בצמוד לאובייקט net.
ומה קורה כשמתקבלת בקשה בשרת ממספר שנמצא ברשימה הרשחורה? - טוב ששאלתם: כלום.. כלומר, קורה בדיוק מה שקורה כשמספר אחר שולח בקשה דומה.
לפי הנוסח המופיע באתר התיעוד, בתרגום חופשי, אפשר לנסח זאת כך: "האובייקט יכול לבוא לשימוש עם מערכות API כלשהן, כדי לבטל את האפשרות של חיבורים נכנסים או יוצאים עבור מספרי IP ספציפיים או טווח של מספרים".
אז איך זה יכול לעזור לנו לממש את החלומות על מערכת מפולטרת ומאובטחת שתמיד חלמנו לפתח?
אז זהו שלא ממש עוזר, אבל נחמד זה כן.קוד בסיסי לדוגמה עבור המודול HTTP:
const http = require('http'); const net = require('net'); let server = http.createServer((req, res) => { //console.log(`source ip: ${req.socket.remoteAddress} ,BlockList rules: ${res.socket.server.BlockList.rules} ,ip match rules: ${res.socket.server.BlockList.check(req.socket.remoteAddress)}`); if (server.BlockList.check(req.socket.remoteAddress)) { res.statusCode = 403; return res.end(); } res.end('hello FILTERED world!') }); const BlockList = new net.BlockList(); BlockList.addAddress('127.0.0.1', 'ipv4'); server.BlockList = BlockList; server.listen(8080, '0.0.0.0');
ובשימוש בexpress ניתן להוסיף middleware:
app.use((req, res, next) => { if (req.socket.server.BlockList.check(req.socket.remoteAddress)) { return res.status(403).end(); next(); });
כמה נקודות:
- עבור השימוש בתכונה יש צורך לעדכן את Node לגירסה 15.x באמצעות כלי האקרובטיקה האהוב עליכם.
- כדי שזה יעבוד, יש צורך להוסיף לפונקציה listen() מספר של host שמאזין לבקשות הנשלחות. אם לא תעשו את זה, אלא תשאירו את הפרמטר ריק, מה שיקרה הוא שמספרי IPV4 לא יתאימו לכללים שהוספתם, בגלל מנגנון שנקרא dual-stack support, שהופך מספרי IPV4 למשולבי IPV6 (ייתכן שזה באג, אבל זה המצב כעת).
- אם אתם משתמשים בnginx ודרכו הגישה לNode, בדרך כלל הגישה לIP של שולח הבקשה הוא דרך הheader x-forwarded-for.
- כפי שציינתי לפני כן, אין אפשרות להוציא מספר שנחסם מהרשימה. אבל סביר להניח שאפשר לפתור את זה איכשהו.. או אפילו לכתוב modoule חדש שיעשה בדיוק את זה, ולתרום אותו לאנושות.
- את החסימה בפועל תצטרכו לממש בעצמכם.
- בדוגמה שצורפה החסימה היא באמצעות הודעת שגיאה 403. אפשר גם להוסיף קאפצ'ה, ומנגנוני זיהוי לבוטים, ושמירה של המידע בDB לשימוש עתידי, ועוד ועוד כיד הדמיון..
לחסום את אלו שברשימה השחורה באופן "מקצועי", כלומר לחסום את האפשרות ליצור socket עם השרת (בשונה מהקמת סוקט ושליחת תוכן בתוך הסוקט, כשהתוכן כולל הודעת חסימה), באמצעות REJECT או DROP (מונחים שמתייחסים לתעבורת הTCP: שליחת הודעת ניתוק בעת ניסיון ליצור סוקט, או חוסר תגובה לניסיון כזה, בהתאמה) לא ניתן באמצעות הprocess של Node עצמו (וגם לא באמצעות python לדוגמה) בלי התממשקות עם מערכת ההפעלה באופן כלשהו (בlinux התממשקות עם netfilter, ובwin עם winsock), מכיון שמערכת ההפעלה היא זו שמקימה את החיבור, ומעבירה את השליטה בsocket שהוקם לnode לאחר שהחיבור כבר הוקם.
ניתן לקרוא בנושא למשל כאן.אמנם עדיין נוכל לטרוק להם את הדלת בצורה לא נעימה בכלל, עם הקוד הזה:
req.socket.destroy()
למהדרין ניתן בקלות להוסיף קוד שיריץ פקודה בiptables (או netsh עבור WIN) שתבצע את החסימה ולא תאפשר ל"שחורים" לפתוח סוקט עם השרת, אבל שני פרטים כדאי לזכור:
- לא קיימת דרך (יותר נכון לא מוכרת לי כזו) שבה תקבלו מידע מהמערכת על IP שחור שמנסה לבצע גישה.
- הרשימה תישאר חסומה כל עוד לא תמחקו אותה (למהדרין מן המהדרין אולי אפשר לבצע אינטגרציה אוטמטית עם fail2ban כדי להוציא אותם אוטומטית משם, אבל סביר להניח שעדיף כבר להתממשק עם netfilter).
השאלות שנשארו פתוחות:
- האם זה לא משהו שיכולתם לממש בעצמכם?
- איזה שירותים לדוגמה מאפשרים את השימוש בתכונה הזו?
אשמח למידע בתגובות.
-
קבלת תאריך עברי של היום בשפת JSבJS גם אפשר, מאמין שיש דרך יותר מסודרת ונכונה, זה מה שיצא לי כעת:
const hebm = ['תשרי', 'חשון', 'כסליו', 'טבת', 'שבט', 'אדר א', 'אדר ב', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול']; const hebc = 'אבגדהוזחטיכלמנסעפצקרשת'.split(''); const toObj = a => Object.fromEntries(a.map((e, i) => [i + 1, e])); const [mobj, cobj] = [hebm, hebc].map(toObj); const toHebCount = n => String(n).split('').toReversed().map((e, i) => cobj[i ? (i * 9) + Number(e) : Number(e)]).toReversed().filter(Boolean).join('"').replace('י"ה', 'ט"ו').replace('י"ו', 'ט"ז').padEnd(2,"'") const [d, m, y] = Intl.DateTimeFormat('en-u-ca-hebrew', { year: '2-digit', month: 'narrow', day: 'numeric' }).format(new Date()).split(' '); console.log(d, m, y); console.log(toHebCount(d), mobj[m], `תש${toHebCount(y)}`);
עריכה: יש באג עם חודש אדר, ראו בהמשך
ואותו דבר כפונקציה שמקבלת תאריך ומחזירה עברי:
עריכה: הפונקציה תוקנה, ונראה שמחזירה תאריך תקין תודה ל @dovid על התיקונים שהוסיף.const getHebDate = date => { const [mobj, cobj] = [['תשרי', 'חשון', 'כסליו', 'טבת', 'שבט', 'אדר', 'ניסן', 'אייר', 'סיון', 'תמוז', 'אב', 'אלול'], 'אבגדהוזחטיכלמנסעפצקרשת'.split('')].map(a => Object.fromEntries(a.map((e, i) => [i + 1, e]))); const toHebCount = n => String(n).split('').toReversed().map((e, i) => cobj[i ? (i * 9) + Number(e) : Number(e)]).toReversed().filter(Boolean).join('"').replace('י"ה', 'ט"ו').replace('י"ו', 'ט"ז').padEnd(2, "'"); const [d, m, y] = Intl.DateTimeFormat('en-u-ca-hebrew', { year: '2-digit', month: 'narrow', day: 'numeric' }).format(date || new Date()).split(' ').map(Number); return `${toHebCount(d)} ${m > 5 ? [0, 3, 6, 8, 11, 14, 17].includes((5700 + y) % 19) && [6, 7].includes(m) ? m === 6 ? "אדר א'" : "אדר ב'" : mobj[m - 1] : mobj[m]} תש${toHebCount(y)}`; }
console.log(getHebDate(Date.now() + 1000*60*60*24*3));
-
פתיחת קובץ מקומי דרך JS ב-HTML@חנון-המרבה
אולי אתה פשוט מחפש את זה.
זה עובד, אני לא הצלחתי למצוא דרך שהכתובת תהיה יחסית.
זה גם מציג הודעה בפעם הראשונה (ואז אפשר לסמן שלא יציג בפעם הבאה). -
בקשה להמלצות על ערוצים/סרטונים של תכנות והמסתעףמוכר, אבל ..
https://github.com/sindresorhus/awesome -
הורדת הרבה תמונות מאתר@יוני אמר בהורדת הרבה תמונות מאתר:
תודה רבה עם איזה פקודה עשית את זה ?
for i in {01..60}; do curl http://www.coloring-book.info/coloring/Hello%20Kitty/hello-kitty-$i.jpg -OJL; done && zip img.zip *
-
לא מצליח לחפש בגוגל בכתובת URL@חכם מוגדר אצלך חיפוש באמצעות יאהו.
ונטפרי מעבירים כל מי שמגיע ליאהו ישירות לגוגל.
לכן תשחק בהגדרות הדפדפן או תאפס את ההגדרות שלו, ותוכל לחפש כרגיל. -
דרכים לאבטחת שימוש בapi@צדיק-תמים
בדוגמה הפשוטה והכללית שאני מכיר מהחיים:
חברות שיש להם נתונים שהם רוצים לשמור עליהם, לדוגמה יד 2 (שגם משתמשים באתגר כמו שציינת) -מחזירים תשובה לשאילתות עם הגבלה על מספר הנתונים, נניח 100 לכל שאילתה.
התשובה נשמרת באיזשהו store מקומי למקרה שתרצה לקבל אותה שוב. אם המגבלה על החיפוש הוא משמעותית, נניח שתי חיפושים ליום, הסיכויים שכל הדטה ידלוף מאד נמוכים.
באופן כללי אני מסכים איתך יותר מאשר עם עצמי - ברוב המקרים זה לא רלוונטי.
פשוט פותח האשכול מיקד את המאמצים שלו (או את הפוסט שלו) בזה שלא תהיה אפשרות לתשאל את הנתונים בלי הקליינט שהוא כתב, וזה לא נראה מוצדק. -
ווטצאפ APIישנו לאחרונה בAPI הרשמי טמפלט ייחודי שנועד בדיוק לזה, נקרא OTP.
כדי להשתמש ברשמי צריך להיות ארגון רשום ברשויות וכדו', אבל המפתח לא צריך WA. -
כמה כדאי לקחת על פיתוח?@one1010
הצדק איתך.
וזה מוכיח לי שלא הובנו דברי, ולכן אני מנסה מכיוון אחר.
זה ניסיון ניעור כללי של האשכול.אני לא מן הסוג שינהל דיון אינסופי בויכוח מי צודק (למרות שזה ממש מהנה.. יש להודות).
כל התגובות באשכול הן טובות, וחלקם ממש מדויקות, בכל תת הנושאים שהתפתחו, ובאופן כללי השיתוף יש לו ערך רב.
ברור שהמגיבים טורחים על התגובות שלהם, וזה משהו שראוי להעריך.
בכל זאת, יש כאן משהו פגום, לדעתי כמובן, שאני מנסה להסבירו, וללא הצלחה.. לעת עתה.
היו שני חלקים:
- לא נכון לקחת כמה שמותר\צודק\ראוי לקחת, הדבר היחיד שנכון הוא לקחת כמה שיותר.
- התגובות מחלישות את השואל (התייחסת בעיקר לזה, אבל זה משני, לא ברור כמה פותח האשכול קשוב לאשכול בשלב זה).
בתחילת קריאת האשכול, היה לי מאד ברור שהשואל יודע שכולם לוקחים כמה שיותר וזה מה שנכון וצודק, אלא שהוא רוצה עצה איך לדעת שהוא מתמחר נכון, ולא מכוון גבוה מדי או נמוך מדי.
הרי מי שמבקש ממנו הצעה יודע שהוא מתחיל, ובונה על מחיר מתאים.
גילוי נאות: אין לי עצה בשבילו.בהמשך קריאת התגובות, התברר לי שלא כך.
(וזה מבלי להתייחס לעובדה שהשואל שאל "כמה כדאי לקחת על פיתוח" וקבל בעיקר תגובות כאלו כמו "אתה חייב לדעת שאתה יכול לספק את המוצר", שזה תגובה נחמדה מאד, אבל לא קשורה לשאלה משום צד וכיוון).
דווקא בגלל שקראתי את כל האשכול, והפריע לי משהו + ראיתי שלא היה אחד שעמד על זה.
כולם מסבירים לו כמה נכון וצודק לקחת, וחלק הנמיכו למתחם ה"מחיר סמלי" או אפילו לתת בחינם כדי להתנסות.
היחיד שהציע הצעה לקחת כמה שיותר, כתב לעשות כך מהסיבה שהלקוח יחשוב שהמוצר איכותי יותר..
משמעות הדבר, שכל מי שקרא את האשכול, ובודאי מי שכבר הגיב, לא ראה את הבעיה הזו.
שלדעתי היא מטלטלת.המחשבה על כמה מוצדק לקחת נובעת מטוב לב ומידות טובות. אבל מה לעשות. זה לא נכון ולא טוב.
אתה, וכל אחד אחר, חייבים לקחת את המקסימום האפשרי, מהרבה מדי סיבות.
חייב, כי בסופר לוקחים ממך את המקסימום. חייב למשפחתך, וגם לעצמך. מהרבה מדי סיבות.יש לסייג שמדובר רק על מכירת מוצר וירטואלי, ולא על מוצר פיזי.
היו שכתבו "חשב כמה אתה רוצה להרוויח", "כמה שמגיע לך", "מחיר מלא", וכדו'.
ברור שהם אלו שמסכימים עם הכיוון הזה.
זה מתקרב לשם, אבל זה עדיין לא מספיק טוב... המחשבה שנכון לקחת סכום מקסימלי כלשהו, זה טעות שצריך להיגמל ממנה. המקסימלי שתוכל לקבל זה האפשרות הנכונה.
ברור לי שהתגובה הקודמת לא השיגה את המטרה, והראיה - היא לא הובנה נכון, בכלל.
לכן, אם להגיב לדברים, אשמח לתגובה על גוף הדיון, כמו שכתב פותח האשכול בכותרת: "כמה כדאי לקחת על פיתוח". -
הורדת הרבה תמונות מאתר@יוני אמר בהורדת הרבה תמונות מאתר:
מישהו יכול להסביר לי איך עושים את זה עם המדריך הזה
מקווה שזה הסבר מספיק טוב:
https://send.magicode.me/send-file/file/a4009049c9e2af16adecd133fe820294c091d444/view -
בקשה להמלצות על ערוצים/סרטונים של תכנות והמסתעףזה שייך ל"מסתעף":
https://github.com/awesome-selfhosted/awesome-selfhosted
https://github.com/trimstray/the-book-of-secret-knowledge
https://github.com/ripienaar/free-for-dev
יש עוד כמה וכמה כאלו, השאלה אם זה גם כיוון טוב. -
אתר למכירת קורסי וידאו. עם הגבלת כניסות ליוזר.@אבי-203 אמר באתר למכירת קורסי וידאו. עם הגבלת כניסות ליוזר.:
איך אני חוסם למשל שלא יהיה מישהו אחד ישלם ויתן את היוזר שלו לכל אחד
אם תמצא פתרון שלא יוכלו להוריד את הוידאו בשום דרך, ימצאו לך כבר פתרון לבעיה הזו.
אם לא מצאת פתרון להגן על הוידאו, לא יעזור שתמצא פתרון לבעיה הזו.אבל לעצם הענין אפשר לחייב יותר פרטים, ולהציג אותם לכל מי שנכנס בחשבון. (כמו למשל מספר ת. ז.) זה מאד מרתיע.
במערכות הקיימות כהיום, לא קיימת הגנה בנושא הזה. ובענין הגנה על הוידאו הפתרונות מאד חלקיים. -
Android studio@dovid אכן לפי התיאור הקצר הבא (שלקוח מכאן) אין דרך לגרום לזה לקרות:
"כדי להתחיל תקשורת בין שני צדדים, הם משתמשים בהצפנה פומבית כדי להעביר בצורה בטוחה מפתח מצד אחד לשני. אחרי כן, שני הצדדים משתמשים במפתח המשותף הזה להצפנה סימטרית (מהירה פי כמה)".
אין דרך לבקש משהו בשם מישהו, כשהבקשה אמורה להיות מוצפנת באופן שאין אפשרות להתערב בה. -
איך לקמפל JSON לתוך EXE-
אפשרי להצפין את הקובץ, עם מפתח סטטי שנמצא בתוך הexe.
-
אפשר לשמור את המידע הזה בregistry, או לשמור במיקום קבוע בתוך %localappdata% וכדומה, המיקום תלוי אם זה גלובלי למחשב או לכל משתמש בנפרד.
אין בעיה בזה שתוכנה יוצרת קובץ במחשב, זה הגיוני ונורמלי. -
בכל דרך פעולה שהיא, בין הנוכחית ובין המוצעת לך כאן, צריך לבדוק ששכפול של הקובץ (ו\או הקבצים הנוספים) לא יאפשר שכפול של פעילות התוכנה (אם התוכנה בתשלום).
בכל מקרה כדאי וצריך להצפין את הנתונים באיזה שהוא אופן, אפשר למשל שהמפתח יהיה משהו סטטי שנמצא בתוך התוכנה + משהו מהמחשב כמו שם משתמש ושם מחשב וכדומה (יש גם API ייעודי לזה של win)
ברור שזה מסבך את הפיתוח בהרבה, אבל אלו הצרכים שהצגת. -
-
דרכים לאבטחת שימוש בapiמסקרנות, אני שואל לאיזה צורך מישהו ישתמש בזה שלא דרך האפליקציה.
באופן כללי, לבנות אפליקציה מתחרה שתשתמש בbackend שלך לא ניתן טכנית בגלל מגבלות CORS.
ז"א שאתה חושש שמישהו יבנה קליינט רק לעצמו. כדי לראות את הנתונים שאתה שולח.
למה שלא ישתמש במה שאתה בנית? מה תהיה הסיבה שבגללה זה עלול לקרות?אם אתה חושש מגישה לנתונים עצמם ואיסוף וסיפוח זוחל של הנתונים, תתמקד בלהגביל את מספר הקריאות פר חלון זמן (או את יצירת הטוקן שזמין לזמן מוגבל, זה אותו דבר)
-
גישה מהמחשב למסד MongoDB בשרתtunnel ssh יכול לפתור את הבעיה (הוא פותח פורט במחשב שלך, שמעביר את הנתונים ישירות אל הפורט בשרת, ומבחינת הקוד שלך הDB הוא לוקאלי). יש עוד תוכנות נוספות שמאפשרות את זה.
-
איך לבנות שרת מיילים?הדרך המקובלת לשליחה באמצעות nodejs (דרך שרת שעושה את השליחה בפועל) היא אחת מה-2: SMTP (התחברות לשרת כמו שתוכנת לקוח מייל מתחברת) ו-API.
למעשה אפשר גם לשלוח ישירות עם nodejs (ללא צורך בשרת, או במקום שרת, וללא צורך בהתחברות).לקבל מיילים באמצעות nodejs (דרך שרת שעושה את הקבלה בפועל) אפשרי טכנית רק באמצעות IMAP (כלומר השרת ישמור את המייל בעצמו, וכשאתה תתחבר עם nodejs אל השרת תוכל לקרוא), או באמצעות API - webhook (האפליקציה שלך מאזינה כמו אתר רגיל, והשרת כשמתקבל מייל מפרסר אותו (או לא) ושולח אליך בקשה עם המייל). לא נראה שתמצא שרת מייל (תוכנה להתקנה) עבור השיטה השניה, והשיטה הראשונה גורמת לכך שתשמור את המיילים פעמיים (אם התכוונת שnodejs יבצע את השמירה ל-DB ולא השרת).
שקול לכתוב שרת שבעצמו יהיה מבוסס nodejs (כלומר יאזין בפורט ויבצע תקשורת מול אלו שרוצים לשלוח אליו. ללא שרת נוסף. זה לא קשה למימוש במיוחד אם תשתמש בnpm package המתאים...).לגבי השליטה על חשבונות, זה כמובן תלוי שרת (כלומר תלוי איזה שרת תבחר להתקין). אם תשתמש באפשרות השלישית תוכל גם להחליט שכל שם משתמש שיהיה הוא ולידי, או לטפל בזה גם באמצעות הDB שלך.