Project

General

Profile

« Previous | Next » 

Revision 7c54d26e

Added by Jim Pingle almost 3 years ago

CA/Cert descr validation fixes. Fixes #13387

Validate description on save when editing and in other situations that
were not yet covered.

While here, ensure that errors when editing a cert leave the user on the
cert edit screen properly, but successful cases return to the cert list.

Also encode some output just in case a bad value was already present
before the validation was fixed.

(cherry picked from commit 2fe0e0fab528be3e297ed14ddd9d9e73c99cc1c4)

View differences:

src/usr/local/www/system_camanager.php
153 153
			$reqdfieldsn = array(
154 154
				gettext("Descriptive name"),
155 155
				gettext("Certificate data"));
156
			/* Make sure we do not have invalid characters in the fields for the certificate */
157
			if (preg_match("/[\?\>\<\&\/\\\"\']/", $_POST['descr'])) {
158
				array_push($input_errors, gettext("The field 'Descriptive Name' contains invalid characters."));
159
			}
156 160
			if ($_POST['cert'] && (!strstr($_POST['cert'], "BEGIN CERTIFICATE") || !strstr($_POST['cert'], "END CERTIFICATE"))) {
157 161
				$input_errors[] = gettext("This certificate does not appear to be valid.");
158 162
			}
......
439 443

  
440 444
	$issuer_ca = lookup_ca($ca['caref']);
441 445
	if ($issuer_ca) {
442
		$issuer_name = $issuer_ca['descr'];
446
		$issuer_name = htmlspecialchars($issuer_ca['descr']);
443 447
	}
444 448

  
445 449
	foreach ($a_cert as $cert) {
src/usr/local/www/system_certmanager.php
246 246
			break;
247 247
		case 'edit':
248 248
		case 'import':
249
			/* Make sure we do not have invalid characters in the fields for the certificate */
250
			if (preg_match("/[\?\>\<\&\/\\\"\']/", $_POST['descr'])) {
251
				$input_errors[] = gettext("The field 'Descriptive Name' contains invalid characters.");
252
			}
249 253
			$pkcs12_data = '';
250 254
			if ($_POST['import_type'] == 'x509') {
251 255
				$reqdfields = explode(" ",
......
448 452
				$ucert = lookup_cert($pconfig['certref']);
449 453
				if ($ucert && $a_user) {
450 454
					$a_user[$userid]['cert'][] = $ucert['refid'];
451
					$savemsg = sprintf(gettext("Added certificate %s to user %s"), $ucert['descr'], $a_user[$userid]['name']);
455
					$savemsg = sprintf(gettext("Added certificate %s to user %s"), htmlspecialchars($ucert['descr']), $a_user[$userid]['name']);
452 456
				}
453 457
				unset($cert);
454 458
				break;
......
484 488
					}
485 489
					// Add it to the config file
486 490
					$config['cert'][] = $newcert;
487
					$savemsg = sprintf(gettext("Signed certificate %s"), $newcert['descr']);
491
					$savemsg = sprintf(gettext("Signed certificate %s"), htmlspecialchars($newcert['descr']));
492
					unset($act);
488 493
				}
489 494
				unset($cert);
490 495
				break;
491 496
			case 'edit':
492 497
				cert_import($cert, $pconfig['cert'], $pconfig['key']);
493
				$savemsg = sprintf(gettext("Edited certificate %s"), $cert['descr']);
498
				$savemsg = sprintf(gettext("Edited certificate %s"), htmlspecialchars($cert['descr']));
499
				unset($act);
494 500
				break;
495 501
			case 'import':
496 502
				/* Import an external certificate+key */
......
510 516
					}
511 517
				}
512 518
				cert_import($cert, $pconfig['cert'], $pconfig['key']);
513
				$savemsg = sprintf(gettext("Imported certificate %s"), $cert['descr']);
519
				$savemsg = sprintf(gettext("Imported certificate %s"), htmlspecialchars($cert['descr']));
520
				unset($act);
514 521
				break;
515 522
			case 'internal':
516 523
				/* Create an internal certificate */
......
554 561
						}
555 562
					}
556 563
				}
557
				$savemsg = sprintf(gettext("Created internal certificate %s"), $cert['descr']);
564
				$savemsg = sprintf(gettext("Created internal certificate %s"), htmlspecialchars($cert['descr']));
565
				unset($act);
558 566
				break;
559 567
			case 'external':
560 568
				/* Create a certificate signing request */
......
598 606
						}
599 607
					}
600 608
				}
601
				$savemsg = sprintf(gettext("Created certificate signing request %s"), $cert['descr']);
609
				$savemsg = sprintf(gettext("Created certificate signing request %s"), htmlspecialchars($cert['descr']));
610
				unset($act);
602 611
				break;
603 612
			default:
604 613
				break;
......
656 665
		$cert['descr'] = $pconfig['descr'];
657 666
		csr_complete($cert, $pconfig['cert']);
658 667
		$thiscert = $cert;
659
		$savemsg = sprintf(gettext("Updated certificate signing request %s"), $pconfig['descr']);
668
		$savemsg = sprintf(gettext("Updated certificate signing request %s"), htmlspecialchars($pconfig['descr']));
660 669
		write_config($savemsg);
661 670
		pfSenseHeader("system_certmanager.php");
662 671
	}
......
708 717
		));
709 718
	}
710 719

  
720
	if ($act) {
721
		$form->addGlobal(new Form_Input(
722
			'act',
723
			null,
724
			'hidden',
725
			$act
726
		));
727
	}
728

  
711 729
	switch ($act) {
712 730
		case 'edit':
713 731
			$maintitle = gettext('Edit an Existing Certificate');
......
1402 1420

  
1403 1421
	$ca = lookup_ca($cert['caref']);
1404 1422
	if ($ca) {
1405
		$caname = $ca['descr'];
1423
		$caname = htmlspecialchars($ca['descr']);
1406 1424
	}
1407 1425
?>
1408 1426
				<tr>

Also available in: Unified diff