Categories
לינוקס

פרוקסמוקס

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

פרוקסמוקס הינה מערכת קוד פתוח מבוססת דביאן לוירטואליזציה. היא מאפשרת מכונות וירטואליות ו-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

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

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

Categories
לינוקס

ISPConfig

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

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

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

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

לשינוי קונפיגורציות בקוד יש להשתמש בנתיב usr/local/ispconfig/server/conf-custom.

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

certbot delete

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

לשיפור יציבות השרת השתמשו באפשרות 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

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

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

Categories
וורדפרס

ווקומרס

ובחזרה לעתיד.

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

ליצירת תבנית בת ל-Storefront, צרו את הנתיב 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' );
	}
}

לעריכת הכיתוב של לחצן התפריט במובייל בתבנית Storefront:

add_filter( 'storefront_menu_toggle_text', 'condless_storefront_menu_toggle_text' );
function condless_storefront_menu_toggle_text( $text ) {
	$text = __( 'תפריט' );
	return $text;
}

לעריכת הכיתוב של הלחצן "עדכן עגלת קניות" במובייל:

add_filter( 'gettext', 'condless_change_update_cart_text', 20, 3 );
function condless_change_update_cart_text( $translated, $text, $domain ) {
	if ( wp_is_mobile() && is_cart() && $translated == 'עדכן עגלת קניות' ) {
		$translated = 'הכיתוב למובייל';
	}
	return $translated;
}

לעריכת קובץ הייצוא CSV של המוצרים עם אותיות שלא בשפה האנגלית יש לקודד אותו ל-UTF-8 (ניתן בפנקס רשימות / גוגל שיטס).

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

add_action( 'woocommerce_thankyou', 'condless_woocommerce_auto_processing_orders' );
function condless_woocommerce_auto_processing_orders( $order_id ) {
	if ( ! $order_id ) {
		return;
	}
	$order = wc_get_order( $order_id );
	if( $order->has_status( 'on-hold' ) ) {
        	$order->update_status( 'processing' );
	}
}

שינוי סדר הופעת התיבות בדף התשלום:

add_filter( 'woocommerce_checkout_fields', 'condless_reordering_checkout_fields' );
function condless_reordering_checkout_fields( $fields ) {
    $billing_order = array(
        'billing_first_name',
        'billing_last_name',
        'billing_email',
        'billing_phone',
        'billing_company',
        'billing_address_1',
        'billing_address_2',
        'billing_postcode',
        'billing_city',
        'billing_state',
        'billing_country'
    );
    $count = 0;
    $priority = 10;
    foreach($billing_order as $field_name){
        $count++;
        $fields['billing'][$field_name]['priority'] = $count * $priority;
    }
    $fields['billing']['billing_email']['class'] = array('form-row-first');
    $fields['billing']['billing_phone']['class'] = array('form-row-last');
    $fields['billing']['billing_postcode']['class'] = array('form-row-first');
    $fields['billing']['billing_city']['class'] = array('form-row-last');
    return $fields;
}

הסתרה של וריאציות מסוימות במוצר:

add_filter( 'woocommerce_dropdown_variation_attribute_options_args', 'condless_hide_dropdown_variation_args' );
function condless_hide_dropdown_variation_args( $args ) {
    $args['show_option_none'] = false;
    foreach( $args['options'] as $key => $option ){
        if( $option === "2,5 kg" ) {
            unset($args['options'][$key]);
        }
    }
    return $args;
}

הוספת ולדיציה לשדות בדף התשלום. לדוגמא, כדי לאפשר אותיות בעברית ותווי ASCII בלבד (אשר כוללים אותיות באנגלית):

add_action( 'woocommerce_after_checkout_validation', 'condless_ascii_validate_checkout', 10, 2 );
function condless_ascii_validate_checkout( $fields, $errors ) {
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'billing_first_name' ] ) )
                $errors->add( 'validation', '<strong>חיוב שם פרטי</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'billing_last_name' ] ) )
                $errors->add( 'validation', '<strong>חיוב שם משפחה</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'billing_company' ] ) )
                $errors->add( 'validation', '<strong>חיוב שם החברה</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'billing_address_1' ] ) )
                $errors->add( 'validation', '<strong>חיוב כתובת רחוב</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'billing_address_2' ] ) )
                $errors->add( 'validation', '<strong>חיוב פרטי כתובת רחוב</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'billing_city' ] ) )
                $errors->add( 'validation', '<strong>חיוב עיר</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'shipping_first_name' ] ) )
                $errors->add( 'validation', '<strong>משלוח שם פרטי</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'shipping_last_name' ] ) )
                $errors->add( 'validation', '<strong>חיוב שם משפחה</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'shipping_company' ] ) )
                $errors->add( 'validation', '<strong>משלוח שם החברה</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'shipping_address_1' ] ) )
                $errors->add( 'validation', '<strong>משלוח כתובת רחוב</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'shipping_address_2' ] ) )
                $errors->add( 'validation', '<strong>משלוח פרטי כתובת רחוב</strong> מכיל אותיות שלא באנגלית או בעברית.' );
        if ( preg_match( '/[^[:ascii:]א-ת]/', $fields[ 'shipping_city' ] ) )
                $errors->add( 'validation', '<strong>משלוח עיר</strong> מכיל אותיות שלא באנגלית או בעברית.' );
}

ביצוע מניפולציות בתצוגה של מחיר המוצר, למשל כדי להציג את ההנחה במוצר שבמבצע:

add_filter( 'woocommerce_get_price_html', 'condless_simple_product_price_format', 10, 2 );
function condless_simple_product_price_format( $price, $product ) {
   if ( $product->is_on_sale() && $product->is_type('simple') ) {
      $price = sprintf( __( '<div class="was-now-save"><div class="was">היה %1$s</div><div class="now">עכשיו %2$s</div><div class="save">חסוך %3$s</div></div>', 'woocommerce' ), wc_price ( $product->get_regular_price() ), wc_price( $product->get_sale_price() ), wc_price( $product->get_regular_price() - $product->get_sale_price() )  );      
   }
   return $price;
}

הצגת מחיר המוצר לפני ואחרי מע"מ ואת סכומו:

add_filter( 'woocommerce_get_price_suffix', 'condless_price_vat_suffix', 10, 4 );
function condless_price_vat_suffix( $html, $instance, $price, $qty ) {
if ( is_product() ) {
        $html .=  ' + ' . wc_price(wc_get_price_including_tax($instance) - wc_get_price_excluding_tax($instance)) . ' מע"מ =  ' . wc_price(wc_get_price_including_tax($instance)); }
        return $html;
}

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

add_action( 'woocommerce_cart_totals_before_order_total', 'condless_wc_display_vat' );
add_action( 'woocommerce_review_order_before_order_total', 'condless_wc_display_vat' );
function  condless_wc_display_vat() {
        foreach( WC()->cart->get_taxes() as $tax ) $all_tax += $tax;
        echo '<tr class="cart-discount">
        <th>'. __( esc_attr( WC()->countries->tax_or_vat() ), 'woocommerce' ) .'</th>
        <td data-title=" '. __( esc_attr( WC()->countries->tax_or_vat() ), 'woocommerce' ) .' ">' . wc_price ( $all_tax ) .'</td>
        </tr>';
}

add_filter( 'woocommerce_cart_totals_order_total_html', 'condless_cart_totals_order_total_html', 20, 1 );
function condless_cart_totals_order_total_html( $value ){
        return '<strong>' . WC()->cart->get_total() . '</strong> ';
}

הסרת ההודעות על מוצר שנוסף/הוסר:

add_filter( 'wc_add_to_cart_message_html', '__return_null' );
add_filter( 'woocommerce_cart_item_removed_notice_type', '__return_null' );

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

add_filter('pre_get_posts','condless_search_wc');
function condless_search_wc( $query ) {
	if( ! is_admin() && is_search() ) {
		$query->set( 'post_type', 'product' );
	}
	return $query;
}

הסתרה מתוצאות החיפוש מוצרים שהוגדרו כך:

add_action( 'pre_get_posts', 'condless_search_query_fix' );
function condless_search_query_fix( $query = false ) {
	if( ! is_admin() && is_search() ) {
		$query->set( 'tax_query', array( array( 'taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'exclude-from-search', 'operator' => 'NOT IN' ) ) );
	}
}

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

add_filter( 'woocommerce_is_sold_individually', 'condless_wc_remove_quantity_fields', 10, 2 );
function condless_wc_remove_quantity_fields( $return, $product ) {
	if ( $product->get_stock_quantity() <= $product->get_low_stock_amount() )
  		return true;
}

להגדרת תשלום מינימלי לרכישה עם משלוח, הזינו בשדה ה"עלות" (החליפו את min_order$ עם הערך הרצוי):

$min_order - [fee percent="100" max_fee="$min_order"]

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

add_filter( 'pum_get_conditions', 'condless_pum_cart_product_quantity_conditions' );
function condless_pum_cart_product_quantity_conditions( $conditions ) {
        return array_merge( $conditions, array(
                'password_page_unlocked' => array(
                        'group'    => __( 'מוצרים' ),
                        'name'     => __( 'מוצרים: כמות בעגלה' ),
                        'callback' => 'cart_product_quantity',
                ),
        ) );
}
function cart_product_quantity() {
        foreach ( WC()->cart->get_cart() as $cart_item ) {
                if ( $cart_item['product_id'] == 772 && $cart_item['quantity'] < 3 ) {
                                return true;
                }
        }
        return false;
}

אפשרויות משלוח מותנות.

פגישות והזמנות.

סיטונאות.

התאמה אישית של המוצרים.

שחזור תוכן של עגלות שננטשו.

יישום אוטומטי של קופון בעגלה.

מעקב משלוחים (כולל דואר ישראל).

הוספת שיטות תשלום לאפליקציות תשלום חסרות API (כמו ביט (Bit), פפר פיי (PepperPay) ופייבוקס (PayBox)).

עמלות והנחות לפי שיטת תשלום.

הנחות מורכבות.

שיטת תשלום פר מוצר.

בקשה להצעת מחיר כצורת תשלום.

איסוף כספים.

עריכה קבוצתית למוצרים עם וריאציות.

סינון מוצרים.

ריבוי ספקים.

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

add_action( 'admin_head', 'condless_admin_custom_css' );
function condless_admin_custom_css() {
	echo '<style>
	.chosen-container .chosen-drop { left: 9999px; } 
	</style>'; 
}

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

Categories
וורדפרס

וורדפרס

ואמני הג'אז.

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

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

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

לשיפור אבטחת המערכת ברמת הוורדפרס: עדכנו באופן תדיר, התקינו תוספים מעטים ככל האפשר, דווחו על כל פעילות חשודה בחשבון לספק האחסון שלכם, השתמשו בכלי המובנה "בריאות אתר", הסירו תבניות שלא בשימוש, התקינו תעודת SSL, בטלו את האפשרות לערוך תבניות ותוספים דרך לוח הבקרה ע"י הוספה לקובץ wp-config.php הוראה:

define( 'DISALLOW_FILE_EDIT', true );

השביתו את האפשרות XML-RPC ואת אפשרות הדפדוף בתיקיות ע"י הוספה לקובץ htaccess. הראשי הוראות:

<Files "xmlrpc.php">
Order Allow,Deny
Deny from all
</Files>

Options -Indexes

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

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

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

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 ומתיקיית ההעלאות.

להרצת אתר וורדפרס עם SSL ברברס פרוקסי יש להוסיף את ההוראה בקובץ wp-config.php מעל "!That's all, stop editing":

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

להתמודדות עם תקלת loopback בעת שימוש בכלי עריכת תבנית, יש לערוך את הקבצים כאשר מופעלת בינתיים תבנית אחרת.

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

לשיפור מהירות הוורדפרס: בטלו את האפשרות לפינגבאקים וטראקבאקים, בצעו כיווץ לתמונות לפני ההעלאה שלהן, בטלו את שירותי העדכון של הפוסטים, והגבילו את מספר הטיוטות והשמירות האוטומטיות ע"י הוספה לקובץ wp-config.php פקודות:

define('AUTOSAVE_INTERVAL', 300 );
define('WP_POST_REVISIONS', false );

להגדרת מגבלת גודל אחסון והעלאת קבצים, יש לקחת בחשבון את המקום הפנוי בשרת, גודל חבילת האחסון, הגדרות ממשק האחסון, הגדרות רשת אתרים בוורדפרס, והקבצים (קיימים במספר מיקומים): php.ini, user.ini, htaccess., wp-config.php, functions.php.

לביצוע שינויים בקבצי התבנית בוורדפרס יש ליצור לה תבנית בת. לשינוי הפונקציונליות בוורדפרס יש להשתמש בהוקים המובנים (המחולקים לפעולות ולפילטרים), את ההוקים יש להוסיף לקובץ functions.php בתבנית הבת. לשינוי הסגנונות בוורדפרס יש להוסיף את הקוד בלוח בקרה => עיצוב => התאמה אישית => CSS מותאם, ובמטרה לשנות את הסגנונות של לוח הבקרה עצמו:

add_action( 'admin_head', 'condless_admin_custom_css' );
function condless_admin_custom_css() { 
	echo '<style>
	// Your custom CSS
	</style>'; 
}

ליצירת תבנית בת ל-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' );
        }
}

להתאמת מבנה ההדר בתבנית Twenty Twenty, היעזרו ב-CSS:

.cover-header-inner-wrapper { min-height: 60vh !important; }
.home .entry-header { display: none; }
.home .post-inner { padding: 0; }

לשימוש בבלוק של קוד בשפות הנכתבות מימין לשמאל ולהגבלת אורכו, היעזרו ב-CSS:

pre.wp-block-code {
	text-align: left;
	direction: ltr;
	max-height: 30vh;
}

לשימוש בפונטים חדשים, היעזרו ב-CSS:

@font-face {
    font-family: $font_family_name;  
    src: url($font_url);  
    font-weight: normal;
}

* { font-family: $font_family_name, Arial, sans-serif; }

להגבלת מספר הפוסטים/דפים שמחבר יכול ליצור:

add_filter( 'wp_insert_post_empty_content', 'condless_cancel_post_save', 99, 2 );
function condless_cancel_post_save( $maybe_empty, $postarr ) {
	if ( $postarr[ 'ID' ] == 0 && ( $postarr[ 'post_type' ] == 'page' || $postarr[ 'post_type' ] == 'post' ) && ! current_user_can( 'manage_categories' ) && ( new WP_Query( array( 'post_author' => $postarr[ 'post_author' ], 'post_type' => $postarr[ 'post_type' ], 'post_status' => array ( 'any', 'trash', 'draft' ) ) ) )->found_posts >= 3 ) {
		return true;
	}
	return $maybe_empty;
}

לאפשר שימוש במשתני session:

add_action( 'init', 'condless_activate_session', 1 );
function condless_activate_session() {
    if( ! session_id() ) {
        session_start();
    }
}

מסחר אלקטרוני.

תגיות לשיתוף יעיל של פוסטים ברשתות החברתיות.

טפסי יצירת קשר. לעיצוב בהתאמה אישית, היעזרו ב-CSS:

.wpcf7-form {
	background: #dcc8a5;
	padding: 10px 20px;
	border: 2px solid #f6efdf;
	border-radius: 7px;
	max-width: 300px;
}
 
.wpcf7-form p {
	color: #4f2a0f;
	margin-bottom: 5px;
}
 
.wpcf7-form input, .wpcf7-form textarea, .wpcf7-form select {
	background: #f6efdf;
	padding: 5px 7px;
	margin: 4px 0 8px 0;
	border: 3px solid #ccb58c;
	color: #4f4f4f;
	border-radius: 7px;
}
 
.wpcf7-form .wpcf7-submit {
	background: #4f2a0f;
	padding: 5px 15px;
	color: #fff;
	min-width: 100px;
}
 
.wpcf7-form input[type="submit"]:hover {
 	background: #000;
}

ריבוי שפות.

פורומים עם אפשרויות ניהול מגוונות.

רשת חברתית עם ממשק ניהול אישי.

לוח מודעות.

סליידר. להתאמה לשפות הנכתבות מימין לשמאל וליצירת וידאו במסך מלא, היעזרו ב-CSS:

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

.wp-video, video.wp-video-shortcode, .mejs-container, .mejs-overlay.load {
	width: 100% !important;
	height: 100% !important;
}
.mejs-container {
	padding-top: 56.25%;
}
.wp-video, video.wp-video-shortcode {
	max-width: 100% !important;
}
video.wp-video-shortcode {
	position: relative;
}
.mejs-mediaelement {
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
}
.mejs-controls {
	display: none;
}
.mejs-overlay-play {
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
	width: auto !important;
	height: auto !important;
}

אפקטי ריחוף על תמונות.

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

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

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.

Categories
לינוקס

דביאן

וצעצוע של סיפור.

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

לשיפור שיעורי השליחה המוצלחת של דוא"ל מהשרת, יש להגדיר לשמות המתחם: DMARC ,DKIM ,SPF ולוודא ששם השרת קיים בערכים: A record ,rDNS, ממשק ניהול השרת, בתצורת ה-MTA (כולל mailname), וה-Content filter שבשימוש.

להגדרת relay host ב-Postfix, השתמשו בפקודות:

apt-get install libsasl2-modules
postconf -e 'relayhost = $relay_host_ip'
postconf -e 'smtp_sasl_auth_enable = yes'
postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'
postconf -e 'smtp_sasl_security_options ='
echo "$relay_host_ip   yourEmail:yourPassword" > /etc/postfix/sasl_passwd
chown root:root /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd
/etc/init.d/postfix restart

להגדרת סוגי אימות ב-SSH יש לערוך את הקובץ sshd_config.

לחסימת התחברות המשתמש root ב-SSH יש להוסיף לקובץ etc/ssh/sshd_config/ את ההוראה:

PermitRootLogin no

להגדרת מיקום שמירת הלוגים וצורתם יש לערוך את הקובץ  etc/rsyslog.conf/ לפי ההוראות.

להגדרת המערכת למניעת חדירות Fail2ban צרו את הקובץ etc/fail2ban/jail.local/ והשתמשו בהוראות, לדוגמא כדי להפעיל הגנה ממשוכת על SSH:

[recidive]
enabled = true

[sshd]
enabled = true

ולהגדרת מספר קבצי לוג:

logpath = /var/www/clients/client12/web*/log/access.log
          /var/www/clients/client13/web*/log/access.log

ולביטול חסימה שנוצרה השתמשו בפקודה:

 fail2ban-client set sshd unbanip $IP

להגדרת חוקי 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 בשרת הווב אפאצ'י, השתמשו בהוראות:

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/

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

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

להסתרת פרטי שרת הווב אפאצ'י, הוסיפו לקובץ etc/apache2/apache2.conf/ את ההוראות:

ServerTokens Prod
ServerSignature Off

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