1515use KaririCode \Sanitizer \Processor \Input \NormalizeLineBreaksSanitizer ;
1616use KaririCode \Sanitizer \Processor \Input \NumericSanitizer ;
1717use KaririCode \Sanitizer \Processor \Input \PhoneSanitizer ;
18+ use KaririCode \Sanitizer \Processor \Input \StripTagsSanitizer ;
1819use KaririCode \Sanitizer \Processor \Input \TrimSanitizer ;
1920use KaririCode \Sanitizer \Processor \Input \UrlSanitizer ;
2021use KaririCode \Sanitizer \Processor \Security \FilenameSanitizer ;
22+ use KaririCode \Sanitizer \Processor \Security \SqlInjectionSanitizer ;
2123use KaririCode \Sanitizer \Processor \Security \XssSanitizer ;
2224use KaririCode \Sanitizer \Sanitizer ;
2325
@@ -139,6 +141,30 @@ class JobApplication
139141 )]
140142 private string $ projectsJson = '' ;
141143
144+ #[Sanitize(
145+ processors: [
146+ 'trim ' ,
147+ 'sql_injection ' => [
148+ 'escapeMap ' => [
149+ "' " => "\\' " ,
150+ '" ' => '\\" ' ,
151+ ],
152+ ],
153+ ]
154+ )]
155+ private string $ searchQuery = '' ;
156+
157+ #[Sanitize(
158+ processors: [
159+ 'trim ' ,
160+ 'strip_tags ' => [
161+ 'allowedTags ' => ['p ' , 'br ' ],
162+ 'keepSafeAttributes ' => true ,
163+ ],
164+ ]
165+ )]
166+ private string $ plainTextContent = '' ;
167+
142168 // Getters and Setters
143169 public function getFullName (): string
144170 {
@@ -259,6 +285,30 @@ public function setProjectsJson(string $value): self
259285
260286 return $ this ;
261287 }
288+
289+ public function getSearchQuery (): string
290+ {
291+ return $ this ->searchQuery ;
292+ }
293+
294+ public function setSearchQuery (string $ value ): self
295+ {
296+ $ this ->searchQuery = $ value ;
297+
298+ return $ this ;
299+ }
300+
301+ public function getPlainTextContent (): string
302+ {
303+ return $ this ->plainTextContent ;
304+ }
305+
306+ public function setPlainTextContent (string $ value ): self
307+ {
308+ $ this ->plainTextContent = $ value ;
309+
310+ return $ this ;
311+ }
262312}
263313
264314// Create and configure the registry
@@ -278,83 +328,89 @@ public function setProjectsJson(string $value): self
278328$ registry ->register ('sanitizer ' , 'filename_sanitizer ' , new FilenameSanitizer ());
279329$ registry ->register ('sanitizer ' , 'json_sanitizer ' , new JsonSanitizer ());
280330$ registry ->register ('sanitizer ' , 'xss_sanitizer ' , new XssSanitizer ());
331+ $ registry ->register ('sanitizer ' , 'sql_injection ' , new SqlInjectionSanitizer ());
332+ $ registry ->register ('sanitizer ' , 'strip_tags ' , new StripTagsSanitizer ());
333+
334+ // Create the sanitizer
335+ $ sanitizer = new Sanitizer ($ registry );
336+
337+ // Create an application with potentially dangerous data
338+ $ application = new JobApplication ();
339+ $ application
340+ ->setFullName (" Walmir Silva <script>alert('xss')</script> " )
341+ ->setEmail (" walmir.silva@gmail.con \n" )
342+ ->setPhone ('11987654321 ' )
343+ ->setProfessionalSummary ("
344+ <h2>Professional Summary</h2>
345+
346+ <p>I am a senior developer with experience in:</p>
347+
348+ <ul>
349+ <li>PHP Development</li>
350+ <li>Database Design</li>
351+ <li>System Architecture</li>
352+ </ul>
353+
354+ <p>Visit my website: <a href='https://example.com'>My Portfolio</a></p>
355+ " )
356+ ->setYearsOfExperience ('10 ' )
357+ ->setPortfolioUrl ('example.com/portfolio ' )
358+ ->setGithubHandle ('@walmir-silva ' )
359+ ->setLinkedinHandle ('Walmir-Silva ' )
360+ ->setResumeFileName ('Walmir Silva Resume (2024).pdf ' )
361+ ->setProjectsJson ('{
362+ "projects": [
363+ {
364+ "name": "E-commerce Platform",
365+ "role": "Lead Developer",
366+ "duration": "2 years"
367+ }
368+ ]
369+ } ' )
370+ ->setProjectsJson ('{
371+ "projects": [
372+ {
373+ "name": "E-commerce Platform",
374+ "role": "Lead Developer",
375+ "duration": "2 years"
376+ }
377+ ]
378+ } ' )
379+ ->setSearchQuery ("SELECT * FROM users'; DROP TABLE users; -- " )
380+ ->setPlainTextContent ('<p>Este é um texto com algumas <b>tags</b> HTML que precisam ser tratadas</p> ' );
381+
382+ // Function to display the results
383+
384+ function displayResults (JobApplication $ application , array $ result ): void
385+ {
386+ echo "Job Application Sanitization Results: \n" ;
387+ echo "===================================== \n\n" ;
388+
389+ echo "Sanitized Values: \n" ;
390+ echo "---------------- \n" ;
391+
392+ // Display all sanitized values with clear formatting
393+ echo sprintf ("Full Name: %s \n" , $ application ->getFullName ());
394+ echo sprintf ("Email: %s \n" , $ application ->getEmail ());
395+ echo sprintf ("Phone: %s \n" , $ application ->getPhone ());
396+ echo sprintf ("Years of Experience: %s \n" , $ application ->getYearsOfExperience ());
397+ echo sprintf ("Portfolio URL: %s \n" , $ application ->getPortfolioUrl ());
398+ echo sprintf ("GitHub Handle: %s \n" , $ application ->getGithubHandle ());
399+ echo sprintf ("LinkedIn Handle: %s \n" , $ application ->getLinkedinHandle ());
400+ echo sprintf ("Resume Filename: %s \n" , $ application ->getResumeFileName ());
401+ // Adicionar os novos campos aqui
402+ echo sprintf ("Search Query: %s \n" , $ application ->getSearchQuery ());
403+ echo sprintf ("Plain Text Content: %s \n" , $ application ->getPlainTextContent ());
404+
405+ echo "\nProfessional Summary: \n" ;
406+ echo "------------------- \n" ;
407+ echo $ application ->getProfessionalSummary () . "\n\n" ;
408+
409+ echo "Projects JSON: \n" ;
410+ echo "------------- \n" ;
411+ echo $ application ->getProjectsJson () . "\n" ;
412+ }
281413
282- $ sanitizer = new FilenameSanitizer ();
283- $ sanitizer ->configure ([
284- 'maxLength ' => 100 ,
285- 'toLowerCase ' => true ,
286- 'allowedExtensions ' => ['jpg ' , 'png ' , 'pdf ' ],
287- 'blockDangerousExtensions ' => true ,
288- ]);
289-
290- echo $ sanitizer ->process ('My File Name.php ' ) . "\n" ; // Retorna "my_file_name"
291- echo $ sanitizer ->process ('Document.PDF ' ); // Retorna "document.pdf"
292-
293- // // Create the sanitizer
294- // $sanitizer = new Sanitizer($registry);
295-
296- // // Create an application with potentially dangerous data
297- // $application = new JobApplication();
298- // $application
299- // ->setFullName(" Walmir Silva <script>alert('xss')</script> ")
300- // ->setEmail(" walmir.silva@gmail.con \n")
301- // ->setPhone("11987654321")
302- // ->setProfessionalSummary("
303- // <h2>Professional Summary</h2>
304-
305- // <p>I am a senior developer with experience in:</p>
306-
307- // <ul>
308- // <li>PHP Development</li>
309- // <li>Database Design</li>
310- // <li>System Architecture</li>
311- // </ul>
312-
313- // <p>Visit my website: <a href='https://example.com'>My Portfolio</a></p>
314- // ")
315- // ->setYearsOfExperience("10")
316- // ->setPortfolioUrl("example.com/portfolio")
317- // ->setGithubHandle("@walmir-silva")
318- // ->setLinkedinHandle("Walmir-Silva")
319- // ->setResumeFileName("Walmir Silva Resume (2024).pdf")
320- // ->setProjectsJson('{
321- // "projects": [
322- // {
323- // "name": "E-commerce Platform",
324- // "role": "Lead Developer",
325- // "duration": "2 years"
326- // }
327- // ]
328- // }');
329-
330- // // Function to display the results
331- // function displayResults(JobApplication $application, array $result): void
332- // {
333- // echo "Job Application Sanitization Results:\n";
334- // echo "=====================================\n\n";
335-
336- // echo "Sanitized Values:\n";
337- // echo "----------------\n";
338-
339- // // Display all sanitized values with clear formatting
340- // echo sprintf("Full Name: %s\n", $application->getFullName());
341- // echo sprintf("Email: %s\n", $application->getEmail());
342- // echo sprintf("Phone: %s\n", $application->getPhone());
343- // echo sprintf("Years of Experience: %s\n", $application->getYearsOfExperience());
344- // echo sprintf("Portfolio URL: %s\n", $application->getPortfolioUrl());
345- // echo sprintf("GitHub Handle: %s\n", $application->getGithubHandle());
346- // echo sprintf("LinkedIn Handle: %s\n", $application->getLinkedinHandle());
347- // echo sprintf("Resume Filename: %s\n", $application->getResumeFileName());
348-
349- // echo "\nProfessional Summary:\n";
350- // echo "-------------------\n";
351- // echo $application->getProfessionalSummary() . "\n\n";
352-
353- // echo "Projects JSON:\n";
354- // echo "-------------\n";
355- // echo $application->getProjectsJson() . "\n";
356- // }
357-
358- // // Sanitize the application and display results
359- // $result = $sanitizer->sanitize($application);
360- // displayResults($application, $result->toArray());
414+ // Sanitize the application and display results
415+ $ result = $ sanitizer ->sanitize ($ application );
416+ displayResults ($ application , $ result ->toArray ());
0 commit comments