diff --git a/src/handlers/payment.rs b/src/handlers/payment.rs
index a21dd0d..7a88fe4 100644
--- a/src/handlers/payment.rs
+++ b/src/handlers/payment.rs
@@ -170,17 +170,23 @@ fn build_alipay_form_html(
let sign = rsa2_sign(&sign_source, &config.private_key)?;
- // 生成自动提交的表单 HTML(使用原始值,浏览器会自动 URL 编码)
+ // 生成自动提交的表单 HTML(HTML 转义防止特殊字符破坏属性)
+ fn h(s: &str) -> String {
+ s.replace('&', "&")
+ .replace('"', """)
+ .replace('<', "<")
+ .replace('>', ">")
+ }
let mut form_fields = String::new();
for (k, v) in ¶ms {
form_fields.push_str(&format!(
r#""#,
- k, v
+ h(k), h(v)
));
}
form_fields.push_str(&format!(
r#""#,
- &sign
+ h(&sign)
));
let html = format!(