我已配置此过程:
DELIMITER //
CREATE PROCEDURE get_news
(IN news_id INT)
BEGIN
SELECT title, body, datetime FROM News
WHERE id = news_id;
END //
DELIMITER ;
我有以下php代码:
$news_id = $_GET["id"];
$dbConnection = new mysqli("localhost","root","","identidad_digital_db");
$sql = "CALL get_news($news_id)";
$result = $dbConnection->query($sql);
$count = $result->num_rows;
if($count==0){
header( 'Location: id_not_found.html' );
}
$m = $result->fetch_assoc()
我认为我的过程将修复sql注入。但是,漏洞仍然有效。”id“只能是整数。这样,基本的“7”和“1”=“2”注入工作。
为什么不起作用?如何正确配置我的过程?我读了文档和一些例子,但我不知道怎么做。
更新
我正在使用regex,但它也不起作用:
BEGIN
IF news_id IS NOT NULL AND news_id RLIKE '^[0-9]+$'
THEN
SELECT title, body, datetime FROM News
WHERE id = news_id;
END IF;
END //
2条答案
按热度按时间bkkx9g8r1#
解决了的!
我将news\u id配置为varchar(20)。显然,在我看来,这些值是int类型,但它们来自php表单,所以它们是字符串。顺便说一句,如果它对某人有帮助,这就是我最终得到的:
knsnq2tg2#
您可以使用cast:
但是,我认为您应该在php中这样做: