preg_replace之后可以进行SQL注入吗?

时间:2015-09-19 16:30:54

标签: php sql sql-injection

我只是在查看我想用于我的网站的脚本。作者使用此功能过滤所有用户输入的数据($_POST$_GET):

function XSSCheck($value) {
    return preg_replace(
        array('/&(?!amp;|quot;|nbsp;|gt;|lt;|laquo;|raquo;|copy;|reg;|#[0-9]{1,5};|#x[0-9A-F]{1,4};)/', '/#(?![0-9]{1,5};|x[0-9A-F]{1,4};)/',       '|<|',  '|>|',  '|"|',      "|'|"   ),
        array('&amp;', '&#35;', '&lt;', '&gt;', '&#34;', '&#39;'),
        stripslashes($value)
    );
}

如果我用它过滤一个字符串,是否可以注入这个SQL查询?例如?

SELECT * FROM table WHERE ID = '{$_REQUEST['id']}'

我已经尝试过,但没有找到任何办法。有人知道替代方案还是这个代码安全?

如果它是安全的,mysqli_real_escape_string()的(dis)优势是什么?我应该将项目代码更改为官方功能吗?

编辑:您投了我的问题,要求关闭它,并说代码不好。但没有人给我任何例子,如何注入代码!我认为没有办法。

1 个答案:

答案 0 :(得分:1)

确保避免SQL注入(比我更老的问题)的唯一方法是准备语句。任何其他“逃脱”都有漏洞(很多是理论上的),应该避免使用。

任何认真对待他们安全的人都会使用准备好的陈述(而不是模仿),使用“逃脱”和你所展示的功能是不专业且不可忽视的恕我直言。