从表面上看,似乎bindparam
通常应该用于消除SQL注入。但是,在什么情况下需要使用literal_column
而不是bindparam
- 以及应该采取哪些措施来阻止SQL注入?
答案 0 :(得分:2)
literal_column
旨在用作列的文字名称,而不是参数(这是一个值),因为列名不能参数化(它的一部分是查询本身)。您通常不应该使用literal_column
在查询中添加值,而只使用列名称。如果您接受列名称的用户输入,则应将这些名称列入白名单。
一个例外是有时你想输出一些SQLAlchemy不直接支持的非常复杂的表达式,而literal_column
基本上允许你在表单中放入自由格式文本。在这些情况下,您应确保表达式(即值)的用户提供的部分仍然通过绑定参数传递。