我想知道在我使用它们之前是否有一个快速简单的函数来清理我的url中的变量。(或$ _POST来想一想......)
我想我可以使用正则表达式来替换不允许使用的字符,但是我很想听听人们使用这类字符的内容吗?
答案 0 :(得分:6)
清洁输入的概念对我来说从来没有多大意义。它是基于某些输入是危险的假设,但实际上没有危险的输入;只是错误处理输入的代码。
它的罪魁祸首是,如果你在一些字符串(代码)中嵌入一个变量,然后由任何类型的解释器进行评估,你必须确保该变量被正确转义。例如,如果在SQL语句中嵌入字符串,则必须引用并转义此字符串中的某些字符。如果您在网址中嵌入了值,则必须使用urlencode
对其进行转义。如果在HTML文档中嵌入字符串,则必须使用htmlspecialchars
进行转义。依此类推。
预先尝试“清理”数据是一种注定要失败的策略,因为你无法知道 - 在那一点上 - 数据将被用于哪个上下文。臭名昭着的magic_quotes PHP的反特性,是这种被误导的主意的一个典型例子。
答案 1 :(得分:3)
我使用PHP input filters和函数urlencode。
答案 2 :(得分:2)
正则表达式可能会有所帮助,PHP 5.2.0还引入了一个完整的filter扩展,专门用于以不同方式过滤输入变量。
很难推荐单一解决方案,因为输入变量的性质是如此......可变。 : - )
答案 3 :(得分:1)
我使用以下方法来清理MYSQL数据库使用的输入。总结一下,通过foreach迭代$ _POST或$ _GET数组,并通过DBSafe函数传递每个$ _POST或$ _GET来清理它。可以很容易地修改DBSafe以用于数据变量的其他用途(例如HTML输出等)。
// Iterate POST array, pass each to DBSafe function to clean up data foreach ($_POST as $key => $PostVal) { // Convert POST Vars into regular vars $$key=DBSafe($PostVal); // Use above statement to leave POST or GET array intact, and use new individual vars // OR, use below to update POST or GET array vars // Update POST vars $_POST[$key]=DBSafe($PostVal); } function DBSafe($InputVal) { // Returns MySQL safe values for DB update. unquoted numeric values; NULL for empty input; escaped, 'single-quoted' string-values; if (is_numeric($InputVal)) { return $InputVal; } else { // escape_string may not be necessary depending on server PHP and MySQL (i.e. magic_quotes) setup. Uncomment below if needed. // $InputVal=mysql_escape_string($InputVal); $InputVal=(!$InputVal?'NULL':"'$InputVal'"); return $InputVal; } }