1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

Merge pull request from GHSA-gv9r-qcjc-5hj7

* Filter JSONP callback function name. v5.0.210,v6.0.121

* Add utest.

* Refine utest
This commit is contained in:
Winlin 2024-03-26 19:30:52 +08:00 committed by GitHub
parent 08971e5905
commit 244ce7bc01
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 83 additions and 7 deletions

View file

@ -332,6 +332,20 @@ void SrsHttpMessage::set_header(SrsHttpHeader* header, bool keep_alive)
}
}
// For callback function name, only allow [a-zA-Z0-9_-.] characters.
bool srs_is_valid_jsonp_callback(std::string callback)
{
for (int i = 0; i < (int)callback.length(); i++) {
char ch = callback.at(i);
bool is_alpha_beta = (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
bool is_number = (ch >= '0' && ch <= '9');
if (!is_alpha_beta && !is_number && ch != '.' && ch != '_' && ch != '-') {
return false;
}
}
return true;
}
srs_error_t SrsHttpMessage::set_url(string url, bool allow_jsonp)
{
srs_error_t err = srs_success;
@ -373,12 +387,16 @@ srs_error_t SrsHttpMessage::set_url(string url, bool allow_jsonp)
// parse jsonp request message.
if (allow_jsonp) {
if (!query_get("callback").empty()) {
jsonp = true;
}
string callback= query_get("callback");
jsonp = !callback.empty();
if (jsonp) {
jsonp_method = query_get("method");
}
if (!srs_is_valid_jsonp_callback(callback)) {
return srs_error_new(ERROR_HTTP_JSONP, "invalid callback=%s", callback.c_str());
}
}
return err;