pyserial-在runtime-输入发送参数中的raw_input对比 - 安全漏洞?
-
19-09-2019 - |
题
我写打开,并通过串口发送到一个文本文件中的记录数据的程序。我目前加入的功能,允许在运行时重新配置串行端口。我提示用户选择哪个变量改变一次一个,以保持它的简单为自己(我将不胜感激优雅的解决方案以及)。
这创建串行实例的pyserial函数(serial.Serial())具有以下参数:
import serial
ser = serial.Serial(port=0, baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0, writeTimeout=None, dsrdtr=None, interCharTimeout=None) #default values shown
我注意到的是,虽然大多数是INT()参数,另一些则不然,即,“超时”。
我知道使用int(raw_input("for the int() type variables))
能让我安全地分配INT变量,但没有默认的变量将需要input()
功能正确地分配可能没有价值。
我在别处读到输入()一般不推荐的,因为它具有用于被利用的潜力(一些有关的eval()?)。我应该怎么那么处理这些投入?即,使用serial.Serial()其中writeTimout = STR(无)引发错误。
谢谢!
解决方案
在最安全的方式仅仅是接受用户的作为字符串输入,然后解析它。即让用户输入键=值对:
baudrate = 9600
parity = N
然后分析这些对,通过在“=”分裂和剥离两侧。指定用字符串查找表(baudrate
字符串映射到baudrate
VAR等)的变量。这样,您就可以处理None
值你想要的任何方式。
此方法简单,安全。 input
将引发异常,如果用户输入不合法的Python,你可能不希望这样。
不隶属于 StackOverflow