Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework] Automatyczne filtrowanie danych, Problem z aktywnym magic quotes
Master Pain
post
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

Ostrzeżenie: (0%)
-----


Witam

Na serwerze może być (lub nie) włączone magic quotes gpc.
Chciałbym, jeżeli jest to możliwe, na poziomie każdego obiektu formularza dodawać filtr, w którym będę miał sprawdzanie, czy magic quotes są włączone, jeżeli tak, to stripuje slashe. Problem nie leży w zbudowaniu filtra (to wiem co i jak) tylko w dodaniu go do każdego pola formularza (wybranych typów pól - najlepiej) z automatu, żebym nie musiał się tym zajmować przy każdym polu w każdym formularzu, lub przy odbieraniu danych.

Czy da się takie coś zrobić?

Pozdrawiam!

UPDATE
Wpadłem na pomysł, żeby zrobić klasy (dla pól tekstowych i textarea), które dziedziczą po Zend_Form_Element_Text/Textarea i dodać im ten filtr. Czy takie rozwiązanie jest sensowne? Czy ZF ma w zanadrzu jakieś ustawienie, z którego można skorzystać?

Ten post edytował Master Pain 17.03.2010, 16:01:40
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
fander
post
Post #2





Grupa: Zarejestrowani
Postów: 231
Pomógł: 22
Dołączył: 6.10.2008

Ostrzeżenie: (0%)
-----


Witam

Chcesz dane przefiltrować w takim razie musisz dodać do pola które chcesz filtrować obiket filtrujący w takim razie musisz stworzyć klasę

  1. class magicQuotesFilter extends Zend_Filter {
  2. public function filter($value){
  3. if(get_magic_quotes_gcp){
  4. return stripMagicQuotes($value);
  5. }
  6. else return $value;
  7. }
  8. }


w w formulazu robisz

$pole->addFilter(new magicQuotesFilter());

oczywiście w klasie magicQuotesFilter metodę stripMagicQuotes($value); musisz napisać sobie sam

Ten post edytował fander 18.03.2010, 10:17:34
Go to the top of the page
+Quote Post
Master Pain
post
Post #3





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

Ostrzeżenie: (0%)
-----


Witam

Dziękuję za pomoc, ale nie jest to do końca rozwiązanie o które mi chodzi, bo nadal muszę dodać filtr do pola formularza, a chciałbym określić to raz w aplikacji i nie zajmować się tym więcej.

Zadam pytanie raz jeszcze: czy dobrym rozwiązaniem jest utworzenie klas dla w/w pól które dziedziczą po klasach z ZF i w tych moich klasach automatycznie dodać filtr? Potem już tworzyć obiekty moich klas - wówczas filtr mam od razu zaaplikowany. Czy jest już jakieś rozwiązanie w ZF, z którego mogę skorzystać?
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


A nie łatwiej to do .htaccess dopisać? php_flag magic_quotes_gpc 0 czy jakoś tak.


--------------------
Go to the top of the page
+Quote Post
Master Pain
post
Post #5





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

Ostrzeżenie: (0%)
-----


Hmm... a czy jest szansa, że nie będę mógł tego ustawić? Jeżeli tak, to nadal potrzebowałbym ustawić to w ZF, ale dzięki.
Go to the top of the page
+Quote Post
viking
post
Post #6





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Masz też w ini_set();


--------------------
Go to the top of the page
+Quote Post
Master Pain
post
Post #7





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

Ostrzeżenie: (0%)
-----


Hmm... w sumie, mało który dostawca uniemożliwia zmiany w ustawieniach PHP. Dzięki viking.
Go to the top of the page
+Quote Post
pc3t
post
Post #8





Grupa: Zarejestrowani
Postów: 7
Pomógł: 1
Dołączył: 11.09.2009

Ostrzeżenie: (0%)
-----


Manual helpa też czasami daje ciekawe odpowiedzi:
http://www.php.net/manual/en/security.magi...s.disabling.php

w index.php (przed załadowaniem zenda wrzuć ten kod):

  1. <?php
  2. $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
  3. while (list($key, $val) = each($process)) {
  4. foreach ($val as $k => $v) {
  5. unset($process[$key][$k]);
  6. if (is_array($v)) {
  7. $process[$key][stripslashes($k)] = $v;
  8. $process[] = &$process[$key][stripslashes($k)];
  9. } else {
  10. $process[$key][stripslashes($k)] = stripslashes($v);
  11. }
  12. }
  13. }
  14. unset($process);
  15. }
  16. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 07:28