我正在网站上与开发团队合作.该网站将使用课程.我负责为类创建数据访问层.了解所有用户输入将在检索时(从帖子或获取)进行转义.几乎没有对输入级别的控制(除非我亲自审查每个人的代码),我认为在我的结尾处(在它到达数据库之前)也会很酷.问题是我不知道如何使用mysql_real_escape_string而不添加更多斜杠.
由于用户输入可能包含斜杠,我无法检查以确保其中有斜杠.我或许可以检查所有需要转义的东西,并确保它们前面有一个斜线,但这似乎不是最好的方法.
有什么建议?
如果您不知道输入是否已被转义,则无法添加自动决定是否转义.您可以尝试分析它,但它永远不会好,您将遇到双反斜杠对等.
一旦发送到您的访问层的数据应该干净并在一个地方处理转义,请做出决定.如果你这样做,其他开发人员将不必担心它(他们可能不想这样做)并且将来移动到另一个数据库会容易得多.它还可以让您随时自由地转到准备好的陈述.
编辑:忘了这个:
几乎无法控制输入级别(除非我亲自审查每个人的代码)
我认为让他们自己发现它是值得的,如果你只是清楚地表明转义属于数据库层并且不应该在其他地方完成.
您是否考虑过在数据到达数据访问层之前没有转义数据?我问,因为他们对你的团队采取的方法有些困惑:
'HTML并不特殊),然后重新转义数据(因为<很特别).如果需要向从数据库中提取的用户显示表单数据,则不得执行该转义步骤(因为它是由数据库完成的,当保存数据时),但仍必须执行HTML转义步骤.如果您犯了错误并执行了错误的操作,则会损坏数据或导致更严重的安全问题.\'对您的数据库意味着什么?应如何'或者\是逃避-如果在所有?如果您更改了数据库引擎,甚至更改了其设置,那些可能会发生变化.然后你可以找到一堆转义/解除转义的代码.缺少单个转义/解除转义可能会导致SQL注入.还有另一种方法:让任何需要数据转义的层逃脱它本身.数据总是以原始的非转义形式在层之间传递.因此,您的数据访问层会进行所有数据库转义.您的HTML输出代码执行所有HTML转义.当您决定要生成PDF时,您的PDF代码会执行所有PDF转义.
| 归档时间: |
|
| 查看次数: |
287 次 |
| 最近记录: |