#!/usr/bin/perl -w -T # # web2yaps.cgi # ################################################################# # # This script is freeware, feel free to share it and modify the # source code. The use and modification of this code is free of # charge, as long as this header remains intact. # # !!! NO WARRANTY !!! # !!! NO COMMERCIAL USE !!! # # Copyright: GPL # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation - Version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # or look at the internet: www.gnu.org/licenses/licenses.html#GPL # ################################################################# # # Script basiert auf 'sendsms.cgi' von # www.steines.de/linux/smsscript.html # unter der GPL veroeffentlicht # ################################################################# # # Perl-Script um von einer Web-Site aus, mit Hilfe von YAPS, # SMS-Nachrichten zu verschicken # # Ich habe hier mal zum Testen den "Tainted-Modus" von Perl # benutzt. Dieser wird mit dem flag "-T" eingestellt. # Dadurch müssen alle evtl. möglichen "verseuchten" Variablen, # Daten und Umgebungs-Variablen erst über eine Kopieraktion # mit Hilfe eines regulären Ausdruckes "entseucht" werden. # Dabei muss man die erlaubten Zeichen angeben und hat # so doch einiges an Sicherheit gewonnen. # ################################################################# # # Bin noch Perl-Beginner, deshalb etwas Nachsicht. Für Tips # und Feedback bin ich sehr dankbar. # # Autor : Heiko Teichmeier # Datum : 04.12.2005 # Contact : heiko.teichmeier@tei-lin-net.de # Homepage: www.tei-lin-net.de # ################################################################# # changelog: # ---------- # 04.12.2005 # Lizenz- und Autorenhinweis eingefuegt # ---------- ################################################################# use CGI qw/:standard :html3/; my $in = new CGI; ######################################################### # Variablen festlegen # ######################################################### # # my ($program_url) = $in->script_name (); # Variable des Scriptnamens my $aktual_foot = "04.12.2005 www.tei-lin-net.de"; # Fusszeile mit letzter Aktualisierung und Mail-Adresse # # # my $maxtry = 3; # max. Anzahl Wählversuche festlegen my $yaps = "/usr/bin/yaps"; # Pfad zum Pagerprogramm my $bg = 'background="/picture/swm_logo_hintergr.jpg"'; # Hintergrund für Homepage #my $bg = ''; # Hintergrund für Homepage my $css = "/css/swm_1.css"; # CSS-Datei # # ### Ende Variablendefinition ############################ my ($level,$versand_messg,$counttry,$title,$sms_nr,$nachricht,$dat,$name); my ($taint_sms_send,$taint_sms_nr,$taint_nachricht,$taint_name,$taint_title); if (defined ($in->param('sms_send'))) { (&do_sms_send($in)) } else { (&do_sms_eing($in)) } &print_ende($in); ### untainten für E-Mail-Adressen (Beispiel) ### # if ($email =~ /(\w{1}[\w-.]*)\@([\w-.]+)/) { # $email = "$1\@$2"; # } ### Unterprogramme und -prozeduren ##################################### ########################### sub do_sms_eing { $title = 'SMS - Nachrichten - Formular'; print "Content-type: text/html\n\n"; print < "$title"
\n

$title

\n Hiermit könnt Ihr schnell mal eine SMS-, Scall-, Quix- oder Pager-Nachricht versenden.

Getestet sind z.Zt. folgende Vorwahlen: 0160, 0170, 0171, 0172, 0173, 0174, 0175, 0177, 0178
Neu Hinzugefügt: 0151 (D1,t-mobile); 0152, 0162 (D2,vodafone); 0163 (E-Plus); 0159, 0176, 0179 (Viag,O2)
Bitte berichtet mir über erfolgreich angewählte andere Vorwahlen (Netzbetreiber haben teilweise unterschiedliche Protkolle). Wendet euch auch mit problematischen Rufnummern an mich, damit ich diese testen und evtl. Einstellungen ändern kann.

SMS-Nachrichten dürfen max. 160 Zeichen lang sein (Quix, Scall und Pager weiß ich nicht). Sollten sie länger sein, splittet sie dieses Programm in mehrere Nachrichten.
Aus Gründen der Benutzbarkeit ist hier die max. Eingabemenge auf 480 Zeichen beschränkt. Also fasst euch kurz.

\n \n \n \n \n \n \n
SMS / Pager - Nr.:\n
Ihre Nachricht:\n
\n    Zeichen
 

END_HTML } ################################## sub do_sms_send{ # Subroutine zum Versenden der eingegebenen SMS-Nachricht $taint_sms_send = (param('sms_send')) || ''; $taint_sms_send =~ m/([0-9]?)/; my $sms_send = $1; # my $sms_send = (param('sms_send')) || ''; if ($sms_send ne "1") { $title = "SMS / Pager ==> Versand ==> Fehler"; print "Content-type: text/html\n\n"; print < "$title"

$title

Fehler im Programmaufruf! Variable '$sms_send' ist nicht '1'

END_HTML } else { $taint_sms_nr = (param('sms_nr')); $taint_sms_nr =~ m/([0-9\/]*)/; $sms_nr = $1; $taint_nachricht = (param('nachricht')); $taint_nachricht =~ m/([\wäöüÄÖÜß\,\s\+\-\(\)\?\!\/\:\_\.. ]*)/; $nachricht = $1; $dat = localtime(time); $taint_name = (param('name')); $taint_name =~ m/([\wäöüÄÖÜß\,\-. ]*)/; $name = $1; if ($name ne "eingabe") { $sms_nr = $name; } ### Header ausgeben print "Content-type: text/html\n\n"; print < END_HTML ### $counttry = 0; while($counttry<$maxtry) { $ENV{PATH} = ""; my $n = system ("$yaps '$sms_nr' '$nachricht' >/dev/null"); ++$counttry; # eins weiter zählen ### if($n ne "0" && $counttry <= $maxtry){ $versand_messg = "Versand ist nach $counttry Wählversuch(en) fehlgeschlagen :-( !!!
\n"; $title = "SMS / Pager ==> Versand ==> Fehler"; sleep(5); } if($n eq "0") { $taint_title = (param('page_title')); $taint_title =~ m/([\wäöüÄÖßÜ\,\-. ]*)/; $title = $1 || "SMS / Pager ==> Versandmeldung"; $versand_messg = "wurde nach $counttry Wählversuch(en) soeben versandt! :-))
\n"; last; } } ### print <"$title"
\n

$title

\n \n \n \n \n \n \n
Ihre Nachricht:$nachricht 
An Empfänger:$sms_nr 
 $versand_messg
$dat
END_HTML } } ######################## sub print_ende { print <

© $aktual_foot

END_HTML }