From 327cbd130a33f50472609ecbfdf9355f48f655e2 Mon Sep 17 00:00:00 2001 From: oesi Date: Mon, 20 Feb 2017 13:39:36 +0100 Subject: [PATCH] =?UTF-8?q?-=20Beim=20=C3=A4ndern=20des=20Passwortes=20mus?= =?UTF-8?q?s=20sich=20das=20neue=20Passwort=20vom=20alten=20unterscheiden?= =?UTF-8?q?=20-=20Wenn=20das=20Passwort=20l=C3=A4nger=20als=20ein=20Jahr?= =?UTF-8?q?=20nicht=20ge=C3=A4ndert=20wurde,=20kann=20jetzt=20automatisch?= =?UTF-8?q?=20nach=20dem=20CIS=20Login=20auf=20die=20Passwort-=C3=84ndern-?= =?UTF-8?q?Seite=20umgeleitet=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/index.php | 67 +++++++++++++++++++------ cis/private/profile/change_password.php | 19 ++++--- config/global.config-default.inc.php | 4 ++ include/tw/passwort.inc.php | 20 ++++++-- locale/de-AT/passwort.php | 3 ++ locale/en-US/passwort.php | 4 +- 6 files changed, 89 insertions(+), 28 deletions(-) diff --git a/cis/index.php b/cis/index.php index 4d6453788..8fa3d3cc5 100644 --- a/cis/index.php +++ b/cis/index.php @@ -22,12 +22,48 @@ * */ require_once('../config/cis.config.inc.php'); +require_once('../config/global.config.inc.php'); require_once('../include/functions.inc.php'); require_once('../include/sprache.class.php'); require_once('../include/phrasen.class.php'); require_once('../include/mail.class.php'); require_once('../include/student.class.php'); +$redirectPasswordChange=false; +if(defined('CIS_CHECK_PASSWORD_CHANGE') && CIS_CHECK_PASSWORD_CHANGE==true) +{ + require_once('../addons/ldap/vilesci/ldap.class.php'); + $user = get_uid(); + $password = $_SERVER['PHP_AUTH_PW']; + $ldap = new ldap(); + $ldap->connect(); + $userdn = $ldap->GetUserDN($user); + $ldap = new ldap(); + if($ldap->connect(LDAP_SERVER, LDAP_PORT, $userdn, $password)) + { + $lastchange = $ldap->getEntry($user,'shadowLastChange'); + if(isset($lastchange[0]) + && isset($lastchange[0]['shadowlastchange']) + && isset($lastchange[0]['shadowlastchange'][0])) + { + $shadowlastchange = $lastchange[0]['shadowlastchange'][0]; + } + else + $shadowlastchange = 0; + + // get unix timestamp 1 year ago + $dt = new DateTime(); + $dt1year = $dt->sub(new DateInterval('P12M')); + $ux1year = $dt1year->format('U'); + + if($shadowlastchange <= $ux1year) + $redirectPasswordChange = true; + else + $redirectPasswordChange = false; + } + else + die('Bind Failed'.$ldap->errormsg); +} /** * Prueft die URL damit keine boesen URLS uebergeben werden koennen * @param $param @@ -46,9 +82,9 @@ function validURLCheck($param) $text.="\nFolgende URL wurde versucht aufzurufen: \n".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; $text.="\n\nIP des Aufrufers: ".$_SERVER['REMOTE_ADDR']; $text.="\n\nUserAgent: ".$_SERVER['HTTP_USER_AGENT']; - + $text.="\n\nAuffälliger Value: $param"; - + $mail = new mail(MAIL_ADMIN, 'no-reply@'.DOMAIN, 'Versuchte XSS Attacke', $text); $mail->send(); die('Invalid URL detected'); @@ -74,7 +110,7 @@ if(isset($_GET['content_id'])) } else $id = ''; - + if(isset($_GET['menu'])) { $menu = $_GET['menu']; @@ -82,7 +118,7 @@ if(isset($_GET['menu'])) } else $menu = 'menu.php?content_id='.$id; - + $user = get_uid(); $student = new student(); if($student->load($user)) @@ -113,14 +149,17 @@ else else $content = '../cms/news.php?studiengang_kz='.$studiengang_kz.'&semester='.$semester.''; } - + +if($redirectPasswordChange) + $content = '../cis/private/profile/change_password.php?requiredtochange=true'; + $sprache = getSprache(); $p = new phrasen($sprache); $db = new basis_db(); ?> - + CIS - <?php echo CAMPUS_NAME; ?> @@ -137,7 +176,7 @@ function changeSprache(sprache) content = document.getElementById('content').contentWindow.location.href; menu = escape(menu); content = escape(content); - + window.location.href="index.php?sprache="+sprache+"&content_id=convert_html_chars($id);?>&menu="+menu+"&content="+content; } function gettimestamp() @@ -163,20 +202,20 @@ function loadampel() - +
  -
+
t('lvplan/lvPlan'); ?>  | - getAll(true); foreach($sprache->result as $row) @@ -187,12 +226,12 @@ function loadampel()
- + - + @@ -231,8 +270,8 @@ function loadampel() - - + + -->';*/ diff --git a/cis/private/profile/change_password.php b/cis/private/profile/change_password.php index 3cdc0bb1c..b45504496 100644 --- a/cis/private/profile/change_password.php +++ b/cis/private/profile/change_password.php @@ -1,22 +1,22 @@ * Alexander Nimmervoll @@ -52,12 +52,15 @@ echo '

'.$p->t('passwort/PasswortAenderFuer',array($db->convert_html_chars($b if(!isset($_SERVER['HTTPS']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='off')) { - + $httpspath = str_replace('http://','https://',APP_ROOT).'cis/private/profile/change_password.php'; echo '
'.$p->t('passwort/NoHttps').'
'.$p->t('passwort/ZuHttpsWechseln').'

'; } - +if(isset($_GET['requiredtochange'])) +{ + echo ''.$p->t('passwort/RequiredToChangeInfo').'

'; +} echo $p->t('passwort/InfotextPolicy').'

@@ -84,7 +87,7 @@ echo $p->t('passwort/InfotextPolicy').' if(isset($_POST['change'])) { - if(!isset($_POST['passwort_alt']) + if(!isset($_POST['passwort_alt']) || !isset($_POST['passwort_neu']) || !isset($_POST['passwort_neu_check'])) { @@ -99,7 +102,7 @@ if(isset($_POST['change'])) if($passwort_neu==$passwort_neu_check) { // Passwort Policy pruefen - if(($errormsg = check_policy($passwort_neu, $p))===true) + if(($errormsg = check_policy($passwort_neu, $p, $passwort_alt))===true) { // Passwort aendern if(($msg = change_password($passwort_alt, $passwort_neu, $uid))===true) diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 34b1d6751..ba24752e3 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -47,6 +47,10 @@ define('CIS_LVALISTE_NOTENEINGABE_ANZEIGEN',true); // Anzeige des LV-Plan Links bei globaler Suche define('CIS_SUCHE_LVPLAN_ANZEIGEN',true); +// Soll geprueft werden ob das Passwort innerhalb des letzten Jahres geaendert wurde true|false +// Wenn dies nicht geaendert wurde wird nach dem Login auf die Passwort aendern Seite umgeleitet +define('CIS_CHECK_PASSWORD_CHANGE',false); + // Link zu den Excel Notenlisten im CIS Anzeigen define('CIS_ANWESENHEITSLISTE_NOTENLISTE_ANZEIGEN',true); diff --git a/include/tw/passwort.inc.php b/include/tw/passwort.inc.php index 2c02d396b..c5b170cbf 100644 --- a/include/tw/passwort.inc.php +++ b/include/tw/passwort.inc.php @@ -31,7 +31,7 @@ $passwort_addons = new addon(); foreach($passwort_addons->aktive_addons as $addon) { $passwort_addon_filename = dirname(__FILE__).'/../../addons/'.$addon.'/vilesci/passwort.inc.php'; - + if(file_exists($passwort_addon_filename)) { include($passwort_addon_filename); @@ -42,7 +42,7 @@ foreach($passwort_addons->aktive_addons as $addon) if(!$passwort_addon_found) { - + /** * Prueft die Passwort Policy * Das Passwort muss zumindest 8 Zeichen enthalten, davon mindestens 1 Großbuchstabe, @@ -52,9 +52,10 @@ if(!$passwort_addon_found) * * @param $passwort_neu das neue Passwort * @param $p Phrasen Objekt - Wenn nicht uebergeben werden die Fehler in der Default Langauge angezeigt + * @param $passwort_alt Altes Passwort bei Passwortaenderung * @return errormsg wenn Policy nicht erfuellt ist oder true wenn ok */ - function check_policy($passwort_neu, $p=null) + function check_policy($passwort_neu, $p=null, $passwort_alt=null) { if(is_null($p)) $p = new phrase(DEFAULT_LANGUAGE); @@ -69,6 +70,15 @@ if(!$passwort_addon_found) $errormsg .= $p->t('passwort/MinLaenge'); } + // Altes Passwort darf nicht gleich dem neuen sein + if(!is_null($passwort_alt) && $passwort_alt!='') + { + if($passwort_neu == $passwort_alt) + { + $error=true; + $errormsg .= $p->t('passwort/nichtGleich'); + } + } // Mindestens 1 Großbuchstabe if(!preg_match('/[A-Z]/', $passwort_neu)) { @@ -115,7 +125,7 @@ if(!$passwort_addon_found) else return true; } - + /** * Aendert das Passwort im LDAP * @param $passwort_alt Altes (aktuelles) Passwort @@ -145,7 +155,7 @@ if(!$passwort_addon_found) $encrypted = base64_encode(pack('H*',hash('sha1',$passwort_neu.$salt)).$salt); $ssha_password = '{SSHA}'.$encrypted; - // LM und NT + // LM und NT //$hash = new Crypt_CHAP_MSv2(); //$hash->password = $passwort_neu; // $lm_password = strtoupper(bin2hex($hash->lmPasswordHash())); diff --git a/locale/de-AT/passwort.php b/locale/de-AT/passwort.php index e6822af8c..1654b8345 100755 --- a/locale/de-AT/passwort.php +++ b/locale/de-AT/passwort.php @@ -30,4 +30,7 @@ $this->phrasen['passwort/CodeOderUsernameFalsch']='Code oder Username falsch'; $this->phrasen['passwort/CaptchaCodeFalsch']='Captcha Code falsch'; $this->phrasen['passwort/AccountErfolgreichAktiviert']='Ihr Account wurde erfolgreich aktiviert'; $this->phrasen['passwort/WeiterZumLogin']='Weiter zum Login'; +$this->phrasen['passwort/RequiredToChangeInfo']='Sie haben Ihr Passwort seit über einem Jahr nicht mehr geändert. +Bitte ändern Sie umgehend Ihr Passwort'; +$this->phrasen['passwort/nichtGleich']='Das neue Passwort muss sich vom alten Passwort unterscheiden.'; ?> diff --git a/locale/en-US/passwort.php b/locale/en-US/passwort.php index ba010c2f0..f0fe46eb7 100755 --- a/locale/en-US/passwort.php +++ b/locale/en-US/passwort.php @@ -30,5 +30,7 @@ $this->phrasen['passwort/CodeOderUsernameFalsch']='Code or Username wrong'; $this->phrasen['passwort/CaptchaCodeFalsch']='Captcha Code wrong'; $this->phrasen['passwort/AccountErfolgreichAktiviert']='Account has been activated successfully'; $this->phrasen['passwort/WeiterZumLogin']='Proceed to Login'; - +$this->phrasen['passwort/RequiredToChangeInfo']='You have not changed your password for over a year. +Please change your password immediately'; +$this->phrasen['passwort/nichtGleich']='The new password must be different from the old password.'; ?>