pyserial-在运行时发送参数 - 输入与raw_input - 安全漏洞?

时间:2010-02-09 17:57:45

标签: python security user-input pyserial

我正在编写一个程序,打开并将通过串口发送的数据记录到文本文件中。我目前正在添加允许在运行时重新配置串行端口的功能。我提示用户选择一次更改一个变量,以便让自己保持简单(我也会欣赏优雅的解决方案)。

创建串行实例的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变量,但默认情况下使用None的变量需要input()函数来正确分配可能的None值。

我在其他地方读过,通常不建议使用input(),因为它有可能被利用(关于eval()的东西?)。那我该如何处理这些投入呢?即使用serial.Serial(),其中writeTimout = str(None)会引发错误。

谢谢!

1 个答案:

答案 0 :(得分:0)

最安全的方法是将用户的输入作为字符串接受,然后解析它。即让用户输入key = value对:

baudrate = 9600
parity = N

然后通过拆分'='并剥离两边来解析这些对。使用字符串查找表分配变量(baudrate字符串映射到baudrate var,依此类推)。这样您就可以以任何方式处理None值。

这种方法简单而安全。如果用户输入不是有效的Python,input将引发异常,您可能不希望这样做。