CakePHP Version Ich verwende ist 3.4.xcakephp3- wie XSS-Filterung zu tun? in meiner cakephp 3 Anwendung
ich mehr als ein Dutzend Formen haben. Ich möchte XSS-Filter für alle Formulare implementieren. Was ist der einfachste Weg dies zu tun, ohne Änderungen an allen Formularfunktionen vorzunehmen?
Ich lese in einer Antwort, dass, um in einer Ansicht zu sterilisieren, wir die CakePHP-Komfortfunktion h ($ string) verwenden sollten, die alle Versuche an XSS völlig harmlos macht.
Ich habe versucht, aber ID hat nicht geklappt.
\ src \ Template \ Users \ view.ctp
<p><span>Address</span>: <?= h($user->address) ?></p>
Gibt es eine Möglichkeit xss Filterung zu implementieren, bevor die Daten in die Datenbank zu speichern?
Meine Controller-Funktion (die für mich gebacken CakePHP) für
\ src \ Controllers \ UsersController.php
public function add(){
$this->viewBuilder()->setLayout('admin') ;
$user = $this->Users->newEntity();
if ($this->request->is('post')) {
$user = $this->Users->patchEntity($user, $this->request->getData());
if ($this->Users->save($user)) {
$this->Flash->success(__('The user has been saved.'));
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('The user could not be saved. Please, try again.'));
}
$groups = $this->Users->Groups->find('list', ['limit' => 200]);
$this->set(compact('user', 'groups'));
$this->set('_serialize', ['user']);
}
\ src \ Modell \ einen neuen Benutzer und seinen Info Hinzufügen Tabelle \ UsersTable.php
public function beforeSave(Event $event)
{
$entity = $event->getData('entity');
if ($entity->isNew()) {
$hasher = new DefaultPasswordHasher();
// Generate an API 'token'
$entity->api_key_plain = sha1(Text::uuid());
// Bcrypt the token so BasicAuthenticate can check
// it during login.
$entity->api_key = $hasher->hash($entity->api_key_plain);
}
return true;
}
Vielen Dank!
Wie hat 'h()' nicht für Sie arbeiten? Auf Ihrem Screenshot sieht es so aus, als hätte es das schädliche Skript-Markup so codiert, dass es nicht ausgeführt wird. Die Convenience-Funktion entkleidet den Inhalt nicht, sondern stellt nur sicher, dass sie korrekt codiert ist, um zu verhindern, dass Benutzereingaben potenziell schädlichen Code eingeben. – drmonkeyninja
Skript-Tags werden jedoch in der Datenbank gespeichert. Das will ich verhindern. @drmonkeyninja – Annabelle
Ich glaube nicht, dass dies etwas ist, was Sie direkt mit CakePHP tun können. Sie müssen wahrscheinlich die Tags im 'beforeSave' manuell entfernen, schauen Sie sich die akzeptierte Antwort dazu an: https://stackoverflow.com/questions/7130867/remove-script-tag-from-html-content. – drmonkeyninja