]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Add some default security
authorMichael Giagnocavo <mgg@giagnocavo.net>
Wed, 29 Jul 2009 04:39:14 +0000 (04:39 +0000)
committerMichael Giagnocavo <mgg@giagnocavo.net>
Wed, 29 Jul 2009 04:39:14 +0000 (04:39 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14407 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/languages/mod_managed/managed/examples/easyroute/App.config
src/mod/languages/mod_managed/managed/examples/easyroute/EasyRoute.suo
src/mod/languages/mod_managed/managed/examples/easyroute/easyroute.dll
src/mod/languages/mod_managed/managed/examples/easyroute/easyroute.dll.config
src/mod/languages/mod_managed/managed/examples/easyroute/easyroute.fs
src/mod/languages/mod_managed/managed/examples/easyroute/easyroute.pdb

index 214f616f9e237e6890506d128b7a5149f796d8c2..2b5a86e71f913d7d2b113672216e3cd2a08d9f02 100644 (file)
@@ -1,10 +1,17 @@
 <?xml version="1.0"?>\r
 <configuration>\r
   <appSettings>\r
-    <add key="connectionString" value="DSN=easyroute;User=root;Password=;" />\r
+    <add key="connectionString" value="DSN=easyroute;User=root;Pwd=;" />\r
     <add key="defaultProfile" value="sofia/default"/>\r
     <add key="defaultGateway" value="192.168.1.1"/>\r
-    <!-- customQuery can be defined. Fields must be in the same order, and the number parameter must be %number% -->\r
-    <!-- <add key="customQuery" value="SELECT gateways.gateway_ip, gateways.group, gateways.limit, gateways.techprofile, numbers.acctcode, numbers.translated from gateways, numbers where numbers.number = %number% and numbers.gateway_id = gateways.gateway_id;" /> -->\r
+    <!-- query can be changed, but fields must be in the same order, and the number parameter must be %number% -->\r
+    <add key="query" value="SELECT gateways.gateway_ip, gateways.group, gateways.limit, gateways.techprofile, numbers.acctcode, numbers.translated from gateways, numbers where numbers.number = %number% and numbers.gateway_id = gateways.gateway_id;" />\r
+    \r
+    <!-- MySQL and other DBs improperly consider \ to be an escape character. easyroute will remove all backslashes from queries to be safe. \r
+         if you can handle backlashes properly, set keepBackslashes to true. -->\r
+    <!-- <add key="keepBackslashes" value="false" -->\r
+    \r
+    <!-- To avoid other injections, the incoming number will remove characters matching this regex. Default [^0-9#\*] allows only digits, # and *.-->\r
+    <add key="numberRegexFilter" value="[^0-9#\*]" />\r
   </appSettings>\r
 </configuration>
\ No newline at end of file
index 354e68d20154e37c13f57bad4f5f347db8854ed7..f9b5b5c2dfda936d6cf8774bc106e02e108164b3 100644 (file)
Binary files a/src/mod/languages/mod_managed/managed/examples/easyroute/EasyRoute.suo and b/src/mod/languages/mod_managed/managed/examples/easyroute/EasyRoute.suo differ
index 3665f8c6bba282d007f029cdacfe23dc19df8883..72b28ea9b5e61ec445ac105c27638915b2004c55 100644 (file)
Binary files a/src/mod/languages/mod_managed/managed/examples/easyroute/easyroute.dll and b/src/mod/languages/mod_managed/managed/examples/easyroute/easyroute.dll differ
index 214f616f9e237e6890506d128b7a5149f796d8c2..2b5a86e71f913d7d2b113672216e3cd2a08d9f02 100644 (file)
@@ -1,10 +1,17 @@
 <?xml version="1.0"?>\r
 <configuration>\r
   <appSettings>\r
-    <add key="connectionString" value="DSN=easyroute;User=root;Password=;" />\r
+    <add key="connectionString" value="DSN=easyroute;User=root;Pwd=;" />\r
     <add key="defaultProfile" value="sofia/default"/>\r
     <add key="defaultGateway" value="192.168.1.1"/>\r
-    <!-- customQuery can be defined. Fields must be in the same order, and the number parameter must be %number% -->\r
-    <!-- <add key="customQuery" value="SELECT gateways.gateway_ip, gateways.group, gateways.limit, gateways.techprofile, numbers.acctcode, numbers.translated from gateways, numbers where numbers.number = %number% and numbers.gateway_id = gateways.gateway_id;" /> -->\r
+    <!-- query can be changed, but fields must be in the same order, and the number parameter must be %number% -->\r
+    <add key="query" value="SELECT gateways.gateway_ip, gateways.group, gateways.limit, gateways.techprofile, numbers.acctcode, numbers.translated from gateways, numbers where numbers.number = %number% and numbers.gateway_id = gateways.gateway_id;" />\r
+    \r
+    <!-- MySQL and other DBs improperly consider \ to be an escape character. easyroute will remove all backslashes from queries to be safe. \r
+         if you can handle backlashes properly, set keepBackslashes to true. -->\r
+    <!-- <add key="keepBackslashes" value="false" -->\r
+    \r
+    <!-- To avoid other injections, the incoming number will remove characters matching this regex. Default [^0-9#\*] allows only digits, # and *.-->\r
+    <add key="numberRegexFilter" value="[^0-9#\*]" />\r
   </appSettings>\r
 </configuration>
\ No newline at end of file
index d3806b4711ae47fa92ed6183e0dc4d8657b627e1..1907d4b2453f43cc3dda9ffbb637c1944f6ebc13 100644 (file)
@@ -6,14 +6,15 @@ open FreeSWITCH
 type QueryResult = { dialstring: string; group: string; acctcode: string; limit: int; translated: string }\r
 \r
 module easyroute =\r
+    let defaultStr def = function null | "" -> def | s -> s\r
     let getAppSetting (name:string) = match Configuration.ConfigurationManager.AppSettings.Get name with null -> "" | x -> x\r
     let connString      = getAppSetting "connectionString"\r
     let defaultProfile  = getAppSetting "defaultProfile"\r
     let defaultGateway  = getAppSetting "defaultGateway"\r
-    let query = match getAppSetting "customQuery" with\r
-                | "" -> "SELECT gateways.gateway_ip, gateways.group, gateways.limit, gateways.techprofile, numbers.acctcode, numbers.translated from gateways, numbers where numbers.number = %number% and numbers.gateway_id = gateways.gateway_id;"\r
-                | x  -> x            \r
+    let query = getAppSetting "query"\r
     let configOk = [ connString; defaultProfile; defaultGateway; query; ] |> List.forall (String.IsNullOrEmpty >> not)\r
+    let keepBackslashes = defaultStr "false" (getAppSetting "keepBackslashes") = "true"\r
+    let numberRegexFilter = defaultStr "[^0-9#]" (getAppSetting "numberRegexFilter")\r
                 \r
     let formatDialstring number gateway profile separator = \r
         match separator with \r
@@ -25,19 +26,21 @@ module easyroute =
         limit = 9999; group = ""; acctcode = ""; translated = number; }\r
         \r
     let readResult (r: IDataReader) number sep =\r
-        let defString def = function null | "" -> def | s -> s\r
-        let gw          = defString defaultGateway <| r.GetString(0)\r
+        let gw          = defaultStr defaultGateway <| r.GetString(0)\r
         let group       = r.GetString(1)\r
         let limit       = match r.GetInt32(2) with 0 -> 9999 | x -> x\r
-        let profile     = defString defaultProfile <| r.GetString(3)\r
+        let profile     = defaultStr defaultProfile <| r.GetString(3)\r
         let acctcode    = r.GetString(4)\r
         let translated  = r.GetString(5)\r
         let dialstring = formatDialstring number gw profile sep\r
         { dialstring = dialstring; limit = limit; group = group; acctcode = acctcode; translated = translated; }\r
 \r
+    let regexOpts = Text.RegularExpressions.RegexOptions.Compiled ||| Text.RegularExpressions.RegexOptions.CultureInvariant\r
     let lookup (number: string) sep =\r
         try\r
-            let query = query.Replace("%number%", sprintf "'%s'" (number.Replace(@"\'", "'").Replace("'", "''"))) // Don't use params cause some odbc drivers are awesome\r
+            let number = if numberRegexFilter = "" then number else Text.RegularExpressions.Regex.Replace(number, numberRegexFilter, "", regexOpts)\r
+            let number = if keepBackslashes        then number else number.Replace("\\", "") \r
+            let query = query.Replace("%number%", sprintf "'%s'" (number.Replace("'", "''"))) // Don't use params cause some odbc drivers are awesome\r
             Log.WriteLine(LogLevel.Debug, "EasyRoute query prepared: {0}", query)\r
             use conn = new Odbc.OdbcConnection(connString)\r
             use comm = new Odbc.OdbcCommand(query, conn)\r
index 010b2d60fd33ccad51ea54039855380610add9f5..c449eba6908ccad175130bb7f918e1e411f84a4f 100644 (file)
Binary files a/src/mod/languages/mod_managed/managed/examples/easyroute/easyroute.pdb and b/src/mod/languages/mod_managed/managed/examples/easyroute/easyroute.pdb differ