test_security_hardening.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. """安全加固:工作流 callbackUrl 与请假 HTTP 回调门禁。"""
  2. from __future__ import annotations
  3. import pytest
  4. from app.services.workflow_callback import (
  5. register_local_callback,
  6. validate_callback_url,
  7. )
  8. def test_validate_callback_url_rejects_http():
  9. with pytest.raises(ValueError, match="禁止 HTTP"):
  10. validate_callback_url("https://evil.example/callback")
  11. with pytest.raises(ValueError, match="禁止 HTTP"):
  12. validate_callback_url("http://169.254.169.254/latest/meta-data/")
  13. def test_validate_callback_url_rejects_unregistered_path():
  14. with pytest.raises(ValueError, match="未注册"):
  15. validate_callback_url("/api/unknown/callback")
  16. def test_validate_callback_url_allows_registered_local_path():
  17. path = "/api/test/security-callback"
  18. register_local_callback(path, lambda db, business_id, event: None)
  19. assert validate_callback_url(path) == path
  20. assert validate_callback_url("") is None
  21. assert validate_callback_url(None) is None
  22. def test_validate_callback_url_rejects_relative_without_slash():
  23. with pytest.raises(ValueError, match="本地内部路径"):
  24. validate_callback_url("admin/leave/callback")