Categories
ווקומרס - WooCommerce

מכירת מדיה בווקומרס

ואוניברסיטת ההמונים.

מכירת גישה למדיה דיגיטלית (עמודי תוכן, קורסי וידאו, תמונות, מוזיקה):

  • עקוב אחר ההוראות שבמדריך
  • התאם את התוסף לעברית:
add_action( 'admin_head', 'condless_admin_custom_css' );
function condless_admin_custom_css() {
	echo '<style> .chosen-container .chosen-drop { left: 9999px; } </style>';
}
  • הוסף בשדה "הערת רכישה" שבמוצר קישור לעמוד בו המדיה מוטמעת
  • הפעל הגנת תוכן עם התוסף
  • במידה והמדיה מאוחסנת בתיקיית המדיה של האתר חסום גישה ישירה אליה, בטל את האפשרות לשיטוט קבצים ול-hotlinking עם התוסף
  • הגבל התחברות ממכשיר אחד בלבד עם התוסף
  • הפעל אימות דו-שלבי

כפי שבוודאי שמת לב- למידה מרחוק תופסת חלק הולך וגדל מאופן הלמידה, מי שלקחה את זה צעד אחד קדימה, היא אוניברסיטת ההמונים, אשר אין ברשותה קמפוס פיזי והיא מציעה תואר שלם מקוון ללא שכר לימוד.

Categories
וורדפרס

וורדפרס מימין לשמאל

ואבן החכמים.

תיקון הבלוק של קוד בעורך גוטנברג (CSS):

pre.wp-block-code {
	text-align: left;
	direction: ltr;
}

תיקון סליידר מבוסס Owl Carousel בקוד (CSS):

.owl-carousel,
.bx-wrapper { direction: ltr; }
.owl-carousel .owl-item { direction: rtl; }

תיקון תפריט נפתח מבוסס Chosen Drop בקוד (CSS):

.chosen-container .chosen-drop { left: 9999px; }

יצירת תבנית בת לתבית Twenty Twenty- צור את הנתיב wp-content/themes/twentytwenty-child, ובו את הקבצים style.css ו-style-rtl.css עם התוכן:

/*
 Theme Name:   twentytwenty Child
 Template:     twentytwenty
*/

וקובץ functions.php עם התוכן:

<?php
add_action( 'wp_enqueue_scripts', 'condless_theme_enqueue_styles' );
function condless_theme_enqueue_styles() {
        if ( is_rtl() ) {
                wp_enqueue_style( 'parent-style-rtl', get_template_directory_uri() . '/style-rtl.css' );
        } else {
                wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
        }
}

תיקון תצוגת הפונטים (CSS):


body {
	font-family: "Inter var", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, sans-serif;
}

יצירת תבנית בת- צור את הנתיב wp-content/themes/storefront-chlid, ובו את הקבצים style.css ו-style-rtl.css עם התוכן:

/*
Theme Name: Storefront Child
Template: storefront
*/

והקובץ functions.php עם התוכן:

<?php
add_action( 'wp_enqueue_scripts', 'condless_theme_enqueue_styles', 9999 );
function condless_theme_enqueue_styles() {
	if ( is_rtl() ) {
        	wp_dequeue_style( 'storefront-child-style' );
		wp_enqueue_style( 'child-style-rtl', get_stylesheet_directory_uri() . '/style-rtl.css', 'storefront-style' );
	}
}

כפי שבוודאי שמת לב- מרבית השפות במזרח התיכון נכתבות מימין לשמאל, אחת התיאוריות מציעה כי אבן היא החומר העיקרי ששימש לכתיבה, והיה פשוט יותר לחרוט עליה מימין לשמאל. כמו כן, עם דיו כתיבה משמאל לימין מונעת מריחה.

Categories
וורדפרס

אבטחת וורדפרס

וחדר הסודות.

שיפור אבטחת המערכת ברמת הוורדפרס:

  • אבטח את השרת
  • הענק הרשאות: 755 לתיקיות, 644 לקבצים
  • עדכן באופן תדיר
  • התקן תוספים מעטים ככל האפשר
  • דווח על כל פעילות חשודה בחשבון לספק האחסון שלכם
  • השתמש בכלי המובנה "בריאות אתר"
  • הסר תבניות שלא בשימוש
  • התקן תעודת SSL
  • השתמש במשתמש מסוג "עורך" והתחבר לאדמין רק בעת הצורך
  • ביטול עורך התבניות המובנה בלוח הבקרה- הוסף לקובץ wp-config.php את ההוראה:
define( 'DISALLOW_FILE_EDIT', true );

מניעת אופציית הדפדוף בתיקיות, גישה לקבצים ותיקיות חשובים, והתקפות XSS- הוסף לקובץ htaccess. את ההוראות:

Options -Indexes

<FilesMatch "^.*(xmlrpc.php|error_log|wp-config\.php|php.ini|\.[hH][tT][aApP].*)$">
Order deny,allow
Deny from all
</FilesMatch>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
# Comment the following directive if multisite
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] 
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

RewriteCond %{HTTP_USER_AGENT} (libwww-perl|wget|python|nikto|curl|scan|java|winhttp|clshttp|loader) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (;|<|>|'|"|\)|\(|%0A|%0D|%22|%27|%28|%3C|%3E|%00).*(libwww-perl|wget|python|nikto|curl|scan|java|winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
RewriteCond %{THE_REQUEST} \?\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} \/\*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} etc/passwd [NC,OR]
RewriteCond %{THE_REQUEST} cgi-bin [NC,OR]
RewriteCond %{THE_REQUEST} (%0A|%0D) [NC,OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC,OR]
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC,OR]
RewriteCond %{QUERY_STRING} (\.\./|\.\.) [OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR] 
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} \=\|w\| [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)/self/(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)cPath=http://(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC,OR] 
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>).* [NC,OR]
RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
RewriteCond %{QUERY_STRING} (\./|\../|\.../)+(motd|etc|bin) [NC,OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} (;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
RewriteCond %{QUERY_STRING} (sp_executesql) [NC]
RewriteRule ^(.*)$ - [F,L]

ביטול אפשרות להרצת PHP- צור קובץ htaccess. בתיקיית ההעלאות עם התוכן:

<Files "*.php">
Order Deny,Allow
Deny from All
</Files>

הסתרת גרסת הוורדפרס ושגיאות התחברות- הוסף לקובץ functions.php שבתבנית הבת:

add_filter( 'the_generator', '__return_false' );
add_filter( 'login_errors', create_function( '$a', "return 'Invalid Input';" ) );

סרוק באופן תדיר את הקוד בתיקיית הוורדפרס ובבסיס הנתונים לאיתור נוזקות ומחק פריטים מיותרים, בצע גיבוי מלא לפני כל שינוי, שקול להתקין את וורדפרס מחדש דרך לוח הבקרה (קבצי הליבה, התבניות והתוספים), היעזר בפקודה למציאת הקבצים ששונו לאחרונה:

find ./ -type f -mtime -15

הסרת נוזקת הפרסומות הקופצות במובייל- מחק את הקבצים wp-tmp.php ,wp-vcd.php ,wp-feed.php מהתיקיה wp-includes, ואת הקוד שיוצר אותם מהקובץ functions.php שבתבניות.

הסרת נוזקת Japanese Keyword Hack- נקה את הקוד הזדוני מהקבצים htaccess. ,wp-config.php ,sitemap.xml ומתיקיית ההעלאות.

כפי שבוודאי שמת לב- מספר רב של נוזקות לוורדפרס, אינן נוצרו במטרה להפיל את האתר כליל, אלא להשתמש בתשתית שלו וליצור תנועת גולשים לרכישת מוצרים באתר צד שלישי, לרוב מוצרי טיפוח ובריאות אשר אסורים לפרסום במדיה הרגילה.

Categories
שרתים וירטואליים

פרוקסמוקס

והמכונית היפנית.

פרוקסמוקס (Proxmox) הינה מערכת קוד פתוח מבוססת דביאן לוירטואליזציה. היא מאפשרת מכונות וירטואליות ו-LXC, אחסון ותקשורת מונחי תוכנה, ויתירות.

גיבוי קבצי התצורה של השרת עצמו עם הפקודה:

tar -zcvf /var/lib/vz/dump/srv_etc_root-$(date +"%Y_%m_%d-%H_%M_%S").tar.gz /etc /root

בטל אפשרות שחזור/הסרת LXC, הפעל את אפשרות ה-Protection. כדי לאפשר למשתמשים לבצע גיבויים, הענק להם הרשאת PVEDatastoreUser על נתיב האחסון והרשאת PVEVMUser על נתיב המכונה הוירטואלית.

הגבלת מספר הגיבויים האוטומטיים שיישמרו- השתמש באפשרות Max Backups (בדאטה סנטר => אחסון).

שימוש ב-NAT יחדיו עם פרוקסמוקס- צור Linux bridge עם ה-LAN IP, והתאם את חומת האש המובנית לעבודה עם המכונות הוירטואליות- הוסף את ההוראות לקובץ etc/network/interfaces/:

post-up   iptables -t raw -I PREROUTING  -i fwbr+ -j CT --zone 1
post-down iptables -t raw -D PREROUTING  -i fwbr+ -j CT --zone 1

הגדרת חוקי NAT ו-port forwarding עם iptables- הוסף לקובץ etc/network/interfaces/ את ההוראות:

post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '$LAN-IP-SUBNET' -o eno1 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '$LAN-IP-SUBNET' -o eno1 -j MASQUERADE
post-up iptables -t nat -A PREROUTING -i eno1 -p tcp -m multiport --dports $PORTS -j DNAT --to $DESTINATION-LAN-IP
post-down iptables -t nat -D PREROUTING -i eno1 -p tcp -m multiport --dports $PORTS -j DNAT --to $DESTINATION-LAN-IP

קבלת תעודת SSL של Let's Encrypt למספר שרתים שנמצאים מאחורי NAT- הגדר port forwarding לפורט 80 לשרת הרלוונטי לזמן הולידציה.

הגדרת אחסון חדש- בשרת => אחסון ודאטה סנטר => אחסון.

כפי שבוודאי שמת לב- המלה פרוקסמוקס אינה נושאת בחיקה משמעות כלשהי, היא נבחרה בעקבות שם מתחם קצר וקליט שהיה זמין, במטרה להיות בצד הבטוח ולא לסיים כמו החברה היפנית לייצור כלי תחבורה ניסאן, אשר עדיין נאבקת להשגת הכתובת nissan.com.

Categories
שרתים וירטואליים

ISPConfig

והחלילן מהמלין.

ISPConfig הינה מערכת קוד פתוח לניהול שרת ולאחסון אתרים בלינוקס, היא מאפשרת ניהול מספר שרתים מאותו ממשק כולל ניהול שרת ווב, ניהול שרת דוא"ל וניהול שרת DNS.

לאתרי אינטרנט עם מדיניות פרטיות מחמירה- בטל את אפשרות הסטטיסטיקות.

ליצירת משתמשים קבע מספר לקוח קבוע ועל מנת ליצור לו משאבים יש להשתמש באפשרות "התחבר כלקוח".

שנה את קונפיגורציות השרת בעזרת בנתיב usr/local/ispconfig/server/conf-custom/ ושל הממשק בקובץ /usr/local/ispconfig/interface/lib/config.inc.local.php.

הפעלת SSL לאתר- תחילה הפעל את ה-SSL ואז את ה-Let’s Encrypt SSL, בנוסף תוכל להשתמש באופציות ההפניה מ-HTTP ל-HTTPS ומ-domain.ltd ל-www.domain.ltd (לאחר יצירת סאב דומיין אוטומטי www). לניקוי תעודת SSL ישנה- השתמש בפקודה (תעודה חדשה יותר תהה עם סיומת מספר גבוהה יותר):

certbot delete

הפעלת SSL באתר וורדפרס מאחורי רברס פרוקסי- הוסף לקובץ wp-config.php את ההוראה:

$_SERVER['HTTPS'] = 'on';

שימוש ב-ISPConfig מאחורי NAT– הפעל את האפשרות Skip Lets Encrypt Check (System => Server Config => Web => SSL Settings), השתמש ב-WAN IP בהגדרות ה-DNS ובהגדרות האתרים, וב-LAN IP בתצורת שרת ובכתובות IP של השרת.

הגדרת רברס פרוקסי השומר על כתובת המבקש המקורי ולא מעביר בקשות לתעודות SSL בשרת הווב אפאצ'י- השתמש בהוראות:

ProxyPreserveHost On
ProxyPass /.well-known/acme-challenge !
ProxyPass /$PATH http://$LAN-IP:$PORT/$PATH
ProxyPassReverse /$PATH http://$LAN-IP:$PORT/$PATH
ProxyPass / http://$LAN-IP:$PORT/
ProxyPassReverse / http://$LAN-IP:$PORT/

שיפור יציבות השרת- השתמש באפשרות rescue (תחת Server Config).

שחזור אתר מסוים מגיבוי השרת- ייצא וייבא את גיבוי קבצי האתר ובסיס הנתונים ואת רשומת הגיבוי הרלוונטי שבבסיס הנתונים של ISPConfig, הרץ ידנית את כל הגיבויים המוגדרים- השתמש בפקודה:

php /usr/local/ispconfig/server/cron_debug.php --cronjob=500-backup.inc.php

הקשחה של מדיניות הדוא"ל- ערוך את ההוראות בקובץ etc/postfix/main.cf/:

smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_non_fqdn_hostname, reject_unknown_recipient_domain, reject_non_fqdn_recipient, reject_unauth_destination, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_rbl_client cbl.abuseat.org,reject_rbl_client dul.dnsbl.sorbs.net,reject_rbl_client ix.dnsbl.manitu.net, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_client_hostname, check_client_access mysql:/etc/postfix/mysql-virtual_client.cf

הגדרת PureFTP לשימוש ב-passive mode (מאפשר שימוש מאחורי חומת אש)- השתמש בהוראות (פתח את אותם הפורטים בחומת האש):

echo "30510 30610" > /etc/pure-ftpd/conf/PassivePortRange
service pure-ftpd-mysql restart

להתמודדות עם חסימת CSRF בעת מחיקת משאבים כלשהם- מחוק אותם ישירות בבסיס הנתונים.

כפי שבוודאי שמת לב- התיאורים הכתובים העתיקים ביותר של סיפור החלילן מהמלין נוצרו בלינבורג, אותה העיירה בה מפותחת התוכנה ISPConfig.

Categories
שרתים וירטואליים

אימות דו-שלבי

וקים דוטקום.

אימות דו-שלבי מבוסס TOTP מקשה על גישה בלתי מורשית לחשבונך, מכיוון שמלבד הסיסמא שלך, יהיה צורך להשיג את הקוד שנוצר באפליקציה שלך בזמן אמת ולהתחבר מידית (הקוד מתחלף כל זמן קצר) או לאתר את הקוד הסודי שלך (secret).

בתהליך אימות זה נוצר קוד חד פעמי בעזרת אלגוריתם שמשתמש בקוד הסודי שלך (secret) ובשעה הנוכחית, כך שכל פרק זמן מוגדר הקוד מתחלף.

אימות דו שלבי הוא חלק ממערך אבטחת המידע הנדרש בכל עסק. על מנת להשתמש בתהליך אימות זה יש להוריד אפליקציית OTP.

להגדרת TOTP כשלב אימות שני בוורדפרס:

  • התקן והפעל את התוסף
  • סרוק את קוד ה-QR דרך האפליקציה
  • לחץ עדכן פרופיל

להגדרת TOTP כשלב אימות שני בוובמייל Roundcube:

  • התקן והפעל את התוסף
  • הפעל את האפשרות דרך לשונית הגדרות

להגדרת TOTP כשלב אימות שני ב-phpMyAdmin:

  • התקן והפעל את הפיצ'ר
  • הפעל את האפשרות דרך לשונית הגדרות

להגדרת TOTP כשלב אימות שני בשרת וירטואלי ל-SSH:

  • התקן והפעל את החבילה
  • בקובץ etc/pam.d/sshd/ הפוך להערה את include common-auth @ והוסף auth required pam_google_authenticator.so
  • בקובץ etc/ssh/sshd_config/ שנה את הערך ChallengeResponseAuthentication ל-yes, ואת הערך PasswordAuthentication ל-no, והוסף AuthenticationMethods publickey,keyboard-interactive
  • הפעל מחדש את ה-SSH service

להגדרת TOTP כשלב אימות שני בממשק ניהול השרתים:

  • לחץ על כפתור ה-TFA בהגדרות משתמש
  • צור קוד סודי רנדומלי (אופציונלי)
  • קבע שם מנפיק (אופציונלי)
  • סרוק את קוד ה-QR עם האפליקציה
  • הכנס את הסיסמא
  • הכנס את ערך ה-TOTP מהאפליקציה
  • לחץ החל

כפי שבוודאי שמת לב- קים דוטקום איים לתבוע את כל שירותי הרשת המרכזיים המציעים צורת אימות זו, על בסיס פטנט שרשם בשנת 2000. לעת עתה הפטנט שלו בוטל על ידי משרד הפטנטים האירופי, בשל פטנט דומה הנרשם ע"י AT&T כבר בשנת 1998.