Конечно, похоже, что кто-то может просто изменить HTML и повторно отправить форму.
Я не уверен насчет PayPal, но Google Checkout обрабатывает это, вместо настройки HTML, он заставляет вас создавать XML, шифровать его с помощью вашего торгового ключа и использовать зашифрованную строку в HTML для передачи в Google. Затем Google расшифровывает его, используя ваш торговый ключ, и вуаля - без изменений.
Посмотрите в документации PayPal что-то вроде "подписания корзины" или "запроса шифрования". Они также могут сделать обратный вызов на ваш сервер, сообщив вам, что было отправлено, и вы можете сравнить его с вашей базой данных, чтобы убедиться, что цены все еще верны.