mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 17:52:36 +00:00
Some injection fixes (#39642)
Fixes a breaking error and possible injection exploit in populate_key_2018-07-09.py caused by a key existing from when byond allowed now blocked characters like ' in usernames e.g. http://www.byond.com/members/immortaljrosh?format=text Additionally fixes some unsanitized values in other queries.
This commit is contained in:
@@ -78,7 +78,7 @@ for current_ckey in ckey_list:
|
|||||||
else:
|
else:
|
||||||
print(msg)
|
print(msg)
|
||||||
continue
|
continue
|
||||||
cursor.execute("UPDATE {0} SET byond_key = \'{1}\' WHERE ckey = \'{2}\'".format(player_table, key, current_ckey[0]))
|
cursor.execute("UPDATE {0} SET byond_key = %s WHERE ckey = %s".format(player_table), (key, current_ckey[0]))
|
||||||
db.commit()
|
db.commit()
|
||||||
end_time = datetime.now()
|
end_time = datetime.now()
|
||||||
print("Script completed at {0} with duration {1}".format(datetime.now().strftime("%Y-%m-%d %H:%M:%S"), end_time - start_time))
|
print("Script completed at {0} with duration {1}".format(datetime.now().strftime("%Y-%m-%d %H:%M:%S"), end_time - start_time))
|
||||||
|
|||||||
@@ -80,8 +80,8 @@
|
|||||||
var/client/banned_client = banned_mob?.client
|
var/client/banned_client = banned_mob?.client
|
||||||
var/banned_mob_guest_key = had_banned_mob && IsGuestKey(banned_mob.key)
|
var/banned_mob_guest_key = had_banned_mob && IsGuestKey(banned_mob.key)
|
||||||
banned_mob = null
|
banned_mob = null
|
||||||
|
var/sql_ckey = sanitizeSQL(ckey)
|
||||||
var/datum/DBQuery/query_add_ban_get_ckey = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("player")] WHERE ckey = '[ckey]'")
|
var/datum/DBQuery/query_add_ban_get_ckey = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'")
|
||||||
if(!query_add_ban_get_ckey.warn_execute())
|
if(!query_add_ban_get_ckey.warn_execute())
|
||||||
qdel(query_add_ban_get_ckey)
|
qdel(query_add_ban_get_ckey)
|
||||||
return
|
return
|
||||||
@@ -123,9 +123,9 @@
|
|||||||
adminwho += ", [C]"
|
adminwho += ", [C]"
|
||||||
|
|
||||||
reason = sanitizeSQL(reason)
|
reason = sanitizeSQL(reason)
|
||||||
|
var/sql_a_ckey = sanitizeSQL(a_ckey)
|
||||||
if(maxadminbancheck)
|
if(maxadminbancheck)
|
||||||
var/datum/DBQuery/query_check_adminban_amt = SSdbcore.NewQuery("SELECT count(id) AS num FROM [format_table_name("ban")] WHERE (a_ckey = '[a_ckey]') AND (bantype = 'ADMIN_PERMABAN' OR (bantype = 'ADMIN_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)")
|
var/datum/DBQuery/query_check_adminban_amt = SSdbcore.NewQuery("SELECT count(id) AS num FROM [format_table_name("ban")] WHERE (a_ckey = '[sql_a_ckey]') AND (bantype = 'ADMIN_PERMABAN' OR (bantype = 'ADMIN_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)")
|
||||||
if(!query_check_adminban_amt.warn_execute())
|
if(!query_check_adminban_amt.warn_execute())
|
||||||
qdel(query_check_adminban_amt)
|
qdel(query_check_adminban_amt)
|
||||||
return
|
return
|
||||||
@@ -143,7 +143,12 @@
|
|||||||
computerid = "0"
|
computerid = "0"
|
||||||
if(!ip)
|
if(!ip)
|
||||||
ip = "0.0.0.0"
|
ip = "0.0.0.0"
|
||||||
var/sql = "INSERT INTO [format_table_name("ban")] (`bantime`,`server_ip`,`server_port`,`round_id`,`bantype`,`reason`,`job`,`duration`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`) VALUES (Now(), INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]', '[GLOB.round_id]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', INET_ATON('[ip]'), '[a_ckey]', '[a_computerid]', INET_ATON('[a_ip]'), '[who]', '[adminwho]')"
|
var/sql_job = sanitizeSQL(job)
|
||||||
|
var/sql_computerid = sanitizeSQL(computerid)
|
||||||
|
var/sql_ip = sanitizeSQL(ip)
|
||||||
|
var/sql_a_computerid = sanitizeSQL(a_computerid)
|
||||||
|
var/sql_a_ip = sanitizeSQL(a_ip)
|
||||||
|
var/sql = "INSERT INTO [format_table_name("ban")] (`bantime`,`server_ip`,`server_port`,`round_id`,`bantype`,`reason`,`job`,`duration`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`) VALUES (Now(), INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]', '[GLOB.round_id]', '[bantype_str]', '[reason]', '[sql_job]', [(duration)?"[duration]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[sql_ckey]', '[sql_computerid]', INET_ATON('[sql_ip]'), '[sql_a_ckey]', '[sql_a_computerid]', INET_ATON('[sql_a_ip]'), '[who]', '[adminwho]')"
|
||||||
var/datum/DBQuery/query_add_ban = SSdbcore.NewQuery(sql)
|
var/datum/DBQuery/query_add_ban = SSdbcore.NewQuery(sql)
|
||||||
if(!query_add_ban.warn_execute())
|
if(!query_add_ban.warn_execute())
|
||||||
qdel(query_add_ban)
|
qdel(query_add_ban)
|
||||||
@@ -207,10 +212,11 @@
|
|||||||
bantype_sql = "(bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now() ) )"
|
bantype_sql = "(bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now() ) )"
|
||||||
else
|
else
|
||||||
bantype_sql = "bantype = '[bantype_str]'"
|
bantype_sql = "bantype = '[bantype_str]'"
|
||||||
|
var/sql_ckey = sanitizeSQL(ckey)
|
||||||
var/sql = "SELECT id FROM [format_table_name("ban")] WHERE ckey = '[ckey]' AND [bantype_sql] AND (unbanned is null OR unbanned = false)"
|
var/sql = "SELECT id FROM [format_table_name("ban")] WHERE ckey = '[sql_ckey]' AND [bantype_sql] AND (unbanned is null OR unbanned = false)"
|
||||||
if(job)
|
if(job)
|
||||||
sql += " AND job = '[job]'"
|
var/sql_job = sanitizeSQL(job)
|
||||||
|
sql += " AND job = '[sql_job]'"
|
||||||
|
|
||||||
if(!SSdbcore.Connect())
|
if(!SSdbcore.Connect())
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
var/isadmin = 0
|
var/isadmin = 0
|
||||||
if(src.client && src.client.holder)
|
if(src.client && src.client.holder)
|
||||||
isadmin = 1
|
isadmin = 1
|
||||||
var/datum/DBQuery/query_get_new_polls = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM [format_table_name("poll_vote")] WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM [format_table_name("poll_textreply")] WHERE ckey = \"[ckey]\")")
|
var/datum/DBQuery/query_get_new_polls = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM [format_table_name("poll_vote")] WHERE ckey = \"[sanitizeSQL(ckey)]\") AND id NOT IN (SELECT pollid FROM [format_table_name("poll_textreply")] WHERE ckey = \"[sanitizeSQL(ckey)]\")")
|
||||||
var/rs = REF(src)
|
var/rs = REF(src)
|
||||||
if(query_get_new_polls.Execute())
|
if(query_get_new_polls.Execute())
|
||||||
var/newpoll = 0
|
var/newpoll = 0
|
||||||
|
|||||||
Reference in New Issue
Block a user