Files
opensourcepos/app/Language/de-CH/Config.php
Ollama 8da4aff262 fix(security): prevent command injection in sendmail path configuration
Add validation for the mailpath POST parameter to prevent command injection
attacks. The path is validated to only allow alphanumeric characters,
underscores, dashes, forward slashes, and dots.

- Required mailpath when protocol is "sendmail"
- Validates format for all non-empty mailpath values
- Blocks common injection vectors: ; | & ` $() spaces newlines
- Added mailpath_invalid translation to all 43 language files
- Simplified validation logic to avoid redundant conditions

Files changed:
- app/Controllers/Config.php: Add regex validation with protocol check
- app/Language/*/Config.php: Add mailpath_invalid error message (43 languages)
- tests/Controllers/ConfigTest.php: Unit tests for validation
2026-04-06 18:37:07 +00:00

333 lines
22 KiB
PHP

<?php
return [
"address" => "Adresse",
"address_required" => "Adresse ist erforderlich",
"all_set" => "All file permissions are set correctly!",
"allow_duplicate_barcodes" => "",
"apostrophe" => "apostrophe",
"backup_button" => "Sicherung",
"backup_database" => "Sicherungs-Datenbank",
"barcode" => "Barcodes",
"barcode_company" => "Firmenname",
"barcode_configuration" => "Barcodes",
"barcode_content" => "Barcode Inhalt",
"barcode_first_row" => "Erste Zeile",
"barcode_font" => "Schrift",
"barcode_formats" => "",
"barcode_generate_if_empty" => "Generiere Barcode wenn leer",
"barcode_height" => "Höhe",
"barcode_id" => "Artikel-Nr/Name",
"barcode_info" => "Barcode Einstellung",
"barcode_layout" => "Barcode Layout",
"barcode_name" => "Name",
"barcode_number" => "UPC/EAN/ISBN",
"barcode_number_in_row" => "Nummer in Zeile",
"barcode_page_cellspacing" => "Zellenabstand auf Seite",
"barcode_page_width" => "Seitenbreite",
"barcode_price" => "Preis",
"barcode_second_row" => "Zeile 2",
"barcode_third_row" => "Zeile 3",
"barcode_tooltip" => "",
"barcode_type" => "Barcode Typ",
"barcode_width" => "Breite (px)",
"bottom" => "Bottom",
"cash_button" => "",
"cash_button_1" => "",
"cash_button_2" => "",
"cash_button_3" => "",
"cash_button_4" => "",
"cash_button_5" => "",
"cash_button_6" => "",
"cash_decimals" => "",
"cash_decimals_tooltip" => "",
"cash_rounding" => "",
"category_dropdown" => "",
"center" => "Center",
"change_apperance_tooltip" => "",
"comma" => "comma",
"company" => "Firmenname",
"company_avatar" => "",
"company_change_image" => "Change Image",
"company_logo" => "Logo",
"company_remove_image" => "Remove Image",
"company_required" => "Firmenname ist erforderlich",
"company_select_image" => "Select Image",
"company_website_url" => "Webseite ist nicht in korrektem Format",
"country_codes" => "Country Codes",
"country_codes_tooltip" => "Comma separated list of country codes for nominatim address lookup.",
"currency_code" => "",
"currency_decimals" => "Currency Decimals",
"currency_symbol" => "Währungssymbol",
"current_employee_only" => "",
"customer_reward" => "",
"customer_reward_duplicate" => "",
"customer_reward_enable" => "",
"customer_reward_invalid_chars" => "",
"customer_reward_required" => "",
"customer_sales_tax_support" => "",
"date_or_time_format" => "",
"datetimeformat" => "Datum und Zeit",
"decimal_point" => "Dezimaltrennzeichen",
"default_barcode_font_size_number" => "Die Barcode Schriftgrösse muss eine Zahl sein",
"default_barcode_font_size_required" => "Die Barcode Schriftgrösse ist erforderlich",
"default_barcode_height_number" => "Die Barcode Höhe muss eine Zahl sein",
"default_barcode_height_required" => "Die Barcode Höhe ist erforderlich",
"default_barcode_num_in_row_number" => "Die Barcode Num muss eine Zahl sein",
"default_barcode_num_in_row_required" => "Die Barcode Num ist erforderlich",
"default_barcode_page_cellspacing_number" => "Der Barcode Zellabstand muss eine Zahl sein",
"default_barcode_page_cellspacing_required" => "Der Barcode Zellabstand ist erforderlich",
"default_barcode_page_width_number" => "Die Barcode Seitenbreite muss eine Zahl sein",
"default_barcode_page_width_required" => "Die Barcode Seitenbreite ist erforderlich",
"default_barcode_width_number" => "Die Barcode Breite muss eine Zahl sein",
"default_barcode_width_required" => "Die Barcode Breite ist erforderlich",
"default_item_columns" => "",
"default_origin_tax_code" => "",
"default_receivings_discount" => "",
"default_receivings_discount_number" => "",
"default_receivings_discount_required" => "",
"default_sales_discount" => "Standard Verkaufsrabatt",
"default_sales_discount_number" => "Der Standard Verkaufsrabatt muss eine Zahl sein",
"default_sales_discount_required" => "Der Standard Verkaufsrabatt ist erforderlich",
"default_tax_category" => "",
"default_tax_code" => "",
"default_tax_jurisdiction" => "",
"default_tax_name_number" => "",
"default_tax_name_required" => "The default tax name is a required field",
"default_tax_rate" => "MWSt %",
"default_tax_rate_1" => "MWSt 1",
"default_tax_rate_2" => "MWSt 2",
"default_tax_rate_3" => "",
"default_tax_rate_number" => "MWSt Rate",
"default_tax_rate_required" => "MWSt ist erforderlich",
"derive_sale_quantity" => "",
"derive_sale_quantity_tooltip" => "",
"dinner_table" => "",
"dinner_table_duplicate" => "",
"dinner_table_enable" => "",
"dinner_table_invalid_chars" => "",
"dinner_table_required" => "",
"dot" => "dot",
"email" => "Email",
"email_configuration" => "Email Configuration",
"email_mailpath" => "Path to Sendmail",
"email_protocol" => "Protocol",
"email_receipt_check_behaviour" => "",
"email_receipt_check_behaviour_always" => "",
"email_receipt_check_behaviour_last" => "",
"email_receipt_check_behaviour_never" => "",
"email_smtp_crypto" => "SMTP Encryption",
"email_smtp_host" => "SMTP Server",
"email_smtp_pass" => "SMTP Password",
"email_smtp_port" => "SMTP Port",
"email_smtp_timeout" => "SMTP Timeout (s)",
"email_smtp_user" => "SMTP Username",
"enable_avatar" => "",
"enable_avatar_tooltip" => "",
"enable_dropdown_tooltip" => "",
"enable_new_look" => "",
"enable_right_bar" => "",
"enable_right_bar_tooltip" => "",
"enforce_privacy" => "",
"enforce_privacy_tooltip" => "",
"fax" => "Fax",
"file_perm" => "There are problems with file permissions please fix and reload this page.",
"financial_year" => "",
"financial_year_apr" => "",
"financial_year_aug" => "",
"financial_year_dec" => "",
"financial_year_feb" => "",
"financial_year_jan" => "",
"financial_year_jul" => "",
"financial_year_jun" => "",
"financial_year_mar" => "",
"financial_year_may" => "",
"financial_year_nov" => "",
"financial_year_oct" => "",
"financial_year_sep" => "",
"floating_labels" => "",
"gcaptcha_enable" => "",
"gcaptcha_secret_key" => "",
"gcaptcha_secret_key_required" => "",
"gcaptcha_site_key" => "",
"gcaptcha_site_key_required" => "",
"gcaptcha_tooltip" => "",
"general" => "Einstellungen",
"general_configuration" => "Einstellungen",
"giftcard_number" => "",
"giftcard_random" => "",
"giftcard_series" => "",
"image_allowed_file_types" => "",
"image_max_height_tooltip" => "",
"image_max_size_tooltip" => "",
"image_max_width_tooltip" => "",
"image_restrictions" => "",
"include_hsn" => "",
"info" => "Instellungen",
"info_configuration" => "Instellungen",
"input_groups" => "",
"integrations" => "",
"integrations_configuration" => "",
"invoice" => "Rechnungs",
"invoice_configuration" => "Druckereinstellungen",
"invoice_default_comments" => "Rechnungskommentar",
"invoice_email_message" => "Rechnungsvorlage (Email)",
"invoice_enable" => "Enable Invoicing",
"invoice_printer" => "Rechnungsdrucker",
"invoice_type" => "",
"is_readable" => "",
"is_writable" => "is writable, but the permissions are higher than 750.",
"item_markup" => "",
"jsprintsetup_required" => "Warnung! Diese Funktion ist nur funktionsfähig",
"language" => "Sprache",
"last_used_invoice_number" => "",
"last_used_quote_number" => "",
"last_used_work_order_number" => "",
"left" => "Left",
"license" => "License",
"license_configuration" => "License Statement",
"line_sequence" => "",
"lines_per_page" => "Zeilen pro Seite",
"lines_per_page_number" => "Zeilen pro Seite muss eine Zahl sein",
"lines_per_page_required" => "Zeilen pro Seite ist erforderlich",
"locale" => "Länder",
"locale_configuration" => "Länderkonfiguration",
"locale_info" => "Info Länderkonfiguration",
"location" => "Lagerort",
"location_configuration" => "Lagerort",
"location_info" => "Lagerort-Information",
"login_form" => "",
"logout" => "Wollen Sie eine Sicherung machen vor dem Beenden? Klicke [OK] für Sicherung",
"mailchimp" => "",
"mailchimp_api_key" => "",
"mailchimp_configuration" => "",
"mailchimp_key_successfully" => "",
"mailchimp_key_unsuccessfully" => "",
"mailchimp_lists" => "",
"mailchimp_tooltip" => "",
"message" => "Message",
"message_configuration" => "Message Configuration",
"msg_msg" => "Saved Text Message",
"msg_msg_placeholder" => "If you wish to use a SMS template save your message here. Otherwise leave the box blank.",
"msg_pwd" => "SMS-API Password",
"msg_pwd_required" => "SMS-API Password is a required field",
"msg_src" => "SMS-API Sender ID",
"msg_src_required" => "SMS-API Sender ID is a required field",
"msg_uid" => "SMS-API Username",
"msg_uid_required" => "SMS-API Username is a required field",
"multi_pack_enabled" => "",
"no_risk" => "No security/vulnerability risks.",
"none" => "none",
"notify_alignment" => "Notification Popup Position",
"number_format" => "Zahlenformat",
"number_locale" => "Länderkonfiguration",
"number_locale_invalid" => "Die eingegebene Lokale ist falsch. Bitte sehen Sie sich den Link tim Tooltip an um einen korrekten Wert zu finden",
"number_locale_required" => "Localennummer ist ein Pflichtfeld",
"number_locale_tooltip" => "Finden Sie eine korrekte Lokale über diesen Link",
"os_timezone" => "",
"ospos_info" => "",
"payment_options_order" => "Payment Options Order",
"perm_risk" => "Permissions higher than 750 leaves this software at risk.",
"phone" => "Telefon",
"phone_required" => "Telefon ist erforderlich",
"print_bottom_margin" => "Unterer Rand",
"print_bottom_margin_number" => "Unterer Rand muss eine Zahl sein",
"print_bottom_margin_required" => "Unterer Rand ist erforderlich",
"print_delay_autoreturn" => "",
"print_delay_autoreturn_number" => "",
"print_delay_autoreturn_required" => "",
"print_footer" => "Drucke Browser Fusszeile",
"print_header" => "Drucke Browser Kopfzeile",
"print_left_margin" => "Rand links",
"print_left_margin_number" => "Rand links muss eine Zahl sein",
"print_left_margin_required" => "Rand links ist erforderlich",
"print_receipt_check_behaviour" => "",
"print_receipt_check_behaviour_always" => "",
"print_receipt_check_behaviour_last" => "",
"print_receipt_check_behaviour_never" => "",
"print_right_margin" => "Rand rechts",
"print_right_margin_number" => "Rand rechts muss eine Zahl sein",
"print_right_margin_required" => "Rand rechts ist erforderlich",
"print_silently" => "Zeige Druckdialog",
"print_top_margin" => "Rand oben",
"print_top_margin_number" => "Rand oben muss eine Zahl sein",
"print_top_margin_required" => "Rand oben ist erforderlich",
"quantity_decimals" => "Quantity Decimals",
"quick_cash_enable" => "",
"quote_default_comments" => "",
"receipt" => "Eingang",
"receipt_category" => "",
"receipt_configuration" => "Druckereinstellungen",
"receipt_default" => "Default",
"receipt_font_size" => "",
"receipt_font_size_number" => "",
"receipt_font_size_required" => "",
"receipt_info" => "Quittungsinformation",
"receipt_printer" => "Quittungsdrucker",
"receipt_short" => "Short",
"receipt_show_company_name" => "",
"receipt_show_description" => "Show Description",
"receipt_show_serialnumber" => "Show Serial Number",
"receipt_show_tax_ind" => "",
"receipt_show_taxes" => "Zeige MWSt",
"receipt_show_total_discount" => "Zeige Gesamtrabatt",
"receipt_template" => "Receipt Template",
"receiving_calculate_average_price" => "Berechne Durchschnittseinkaufspreis",
"recv_invoice_format" => "Format Eingangsrechnung",
"register_mode_default" => "",
"report_an_issue" => "",
"return_policy_required" => "Rücknahmepolitik erforderlich",
"reward" => "",
"reward_configuration" => "",
"right" => "Right",
"sales_invoice_format" => "Format Verkaufsrechnung",
"sales_quote_format" => "",
"mailpath_invalid" => "Ungültiger Sendmail-Pfad. Nur Buchstaben, Zahlen, Bindestriche, Unterstriche, Schrägstriche und Punkte sind erlaubt.",
"saved_successfully" => "Einstellungen erfolgreich gesichert",
"saved_unsuccessfully" => "Einstellungen konnten nicht gesichert werden",
"security_issue" => "Security Vulnerability Warning",
"server_notice" => "Please use the below info for issue reporting.",
"service_charge" => "",
"show_due_enable" => "",
"show_office_group" => "",
"statistics" => "Send statistics",
"statistics_tooltip" => "Send statistics for development and feature improvement purposes",
"stock_location" => "Lagerort",
"stock_location_duplicate" => "Bitte verwenden Sie einen eindeutigen Lagerort",
"stock_location_invalid_chars" => "Der Lagerort kann keine Unterstriche enthalten",
"stock_location_required" => "Lagerort Nummer ist erforderlich",
"suggestions_fifth_column" => "",
"suggestions_first_column" => "",
"suggestions_fourth_column" => "",
"suggestions_layout" => "",
"suggestions_second_column" => "",
"suggestions_third_column" => "",
"system_conf" => "Setup & Conf",
"system_info" => "System Info",
"table" => "",
"table_configuration" => "",
"takings_printer" => "Takings Printer",
"tax" => "",
"tax_category" => "",
"tax_category_duplicate" => "",
"tax_category_invalid_chars" => "",
"tax_category_required" => "",
"tax_category_used" => "",
"tax_configuration" => "",
"tax_decimals" => "Tax Decimals",
"tax_id" => "",
"tax_included" => "MWSt inbegriffen",
"theme" => "Design",
"theme_preview" => "",
"thousands_separator" => "Tausendertrennzeichen",
"timezone" => "Zeitzone",
"timezone_error" => "",
"top" => "Top",
"use_destination_based_tax" => "",
"user_timezone" => "",
"website" => "Website",
"wholesale_markup" => "",
"work_order_enable" => "",
"work_order_format" => "",
];