2015-06-30 4 views
0

У меня возникла проблема с анализом через предопределенный отчет xess nessus и дамп данных в базу данных mysql. Некоторые из данных, которые я вбрасываю в базу данных, имеют следующие символы, которые делают mysql barf явно: '"\ruby: отбрасывание обратных косых черт из строки

Я могу удалить одиночные и двойные кавычки, но есть ли способ избежать побега? Имейте в виду, я не имею контроль над тем, что хранится, когда он повторяется Вот пример:..

myvariable = "this is some bloated nessus output that has a bunch of crappy data and this domain\username" 

myvariable.gsub!(/\\/, '') 

следующая GSUB обыкновение удалить обратный слеш, так как он уже думает \ и экранируются

здесь является фактический код, обрабатывающий файл nessus xml:

#!/usr/bin/ruby 
# 
# Database Schema:                                                        
# VALUES(Id (leave null), start time, hostname, host_ip, operating_system, scan_name, plugin_id, cve, cvss, risk, port, description, synopsis, solution, see_also, plugin_output, vuln_crit, vuln_high, vuln_med)        
#                                                            
require 'mysql'                                                        
require 'nessus'                                                        

begin                                                           



con = Mysql.new 'yourdbhost', 'yourdbuser', 'yourpass', 'nessusdb'                                             
scanTime = Time.now.to_i                                                      

Nessus::Parse.new("bloated.xml", :version => 2) do |scan|                                  


    scan.each_host do |host| # enumerate each host                                                
     start_time = host.start_time                                                   
     next if host.event_count.zero? # skip host if there are no events to dump in the db                                     

     host.each_event do |event|                                                    
#   '#{event.see_also.join('\s').gsub(/\"|\'|\\/, '')}'                                            
#   '#{event.solution.gsub!(/\"|\'|\\/, '')}'                                               
#   '#{event.synopsis.gsub!(/\"|\'|\\/, '')}'                                               
      con.query(\                                                      
       "INSERT INTO nessus_scans VALUES \                                                
       (NULL, \                                                      
       '#{scanTime}', \                                                    
       '#{host.hostname}', \                                                   
       '#{host.ip}', \                                                    
       '#{host.operating_system}',\                                                 
       '#{scan.title}', \                                                    
       '#{event.plugin_id}', \                                                  
       '#{event.cve}', \                                                    
       '#{event.cvss_base_score}',\                                                 
       '#{event.risk}', \                                                    
       '#{event.port}', \                                                    
       '#{event.description.gsub!(/\"|\'|\\/, '')}', \                                            
       NULL, \                                                      
       NULL, \                                                      
       NULL, \                                                      
       NULL, \                                                      
       NULL, \                                                      
       NULL, \                                                      
       NULL \)                                                      
       ")                                                        

     end # end xml file iteration                                                   
    end # end scan.each_host iteration                                                   
end # end host.each_event iteration                                                   

rescue Mysql::Error => e                                                      
    puts e.errno                                                        
    puts e.error                                                        
ensure                                                           
    con.close if con                                                       
end 
+0

Где моя переменная? он думает, что это ускользнуло из-за двойных кавычек вокруг моей переменной – Mircea

+0

вот строка в коде, которая пытается проанализировать строки, которые имеют обратную косую черту в них: '# {event.description.gsub! (/ \ "| \ '| \\ /,' ')}' вот фактический код для справки: https://github.com/zachsis/nessus-db-report/blob/master/xmltodatabase.rb – dobbs

ответ

2

У вас есть гигантский SQL injection hole, потому что вы не делаете любой спасаясь здесь. Использование драйвера MySQL напрямую - очень плохая идея. По крайней мере, используйте уровень базы данных, например Sequel или ActiveRecord. Единственная причина, по которой MySQL является «barfing», заключается в том, что вы не используете его правильно, вы должны побег.

Самое простое исправление для этого беспорядка - использовать метод escape_string, но вам нужно сделать это для каждого отдельного значения, что быстро становится утомительным. Правильный уровень базы данных позволяет использовать параметризованные запросы, которые обрабатывают экранирование для вас, поэтому я настоятельно рекомендую это.

+0

escape_string - это то, что я был Спасибо за помощь. Спасибо за помощь. Это мой третий день кодирования рубинов и первый раз записывая в базу данных из программы, так что ваш вход оценивается. спасибо – dobbs

+0

Ничего страшного. Просто будьте очень осторожны при написании кода SQL вручную. «Мы обнаружили, что Sequel - хороший компромисс между уровнем низкого уровня, который ему не мешает, и оказывает большую поддержку при написании запросов. ActiveRecord - это гораздо большее обязательство, но дает вам много времени повторная абстракция. – tadman

0

, например, вы можете использовать скобки:

myvariable.gsub!(/[\\]+/, '') 
Смежные вопросы