托管我的网站的服务器无法升级到较新版本的 MysQL(第 5 版),并且由于安全问题,托管公司已禁用(在我创建了许多之后)存储过程。
DELIMITER ;;
CREATE DEFINER=`blahblahblah`@`xx.xx.xx.%` PROCEDURE `get_bindings_chart`(IN in_layout_id TINYINT(3), IN in_game_id SMALLINT(5))
BEGIN
SELECT b.normal_group, b.normal_action, b.shift_group, b.shift_action, b.ctrl_group, b.ctrl_action, b.alt_group, b.alt_action, b.altgr_group, b.altgr_action, b.extra_group, b.extra_action, b.image_file, b.key_number
FROM bindings as b
WHERE b.layout_id = in_layout_id
AND b.game_id = in_game_id;
END ;;
我可以使用哪些替代存储过程的方法?我的网站主要是 PHP。 PHP 替代品是否存在安全风险?谢谢。
最佳答案
没有任何语言可以证明安全问题。安全问题由开发者负责。
另一种看待它的方式是,您可以用任何语言(包括 MySQL 存储过程)编写不安全的应用程序,同样,您可以用任何语言编写安全的应用程序。
关于用 PHP 代码编写安全 SQL,您应该阅读:
- How can I prevent SQL injection in PHP?
- http://php.net/manual/en/security.database.sql-injection.php
- SQL Injection Myths and Fallacies (我的演讲)
这些应该有助于让您了解 SQL 编程中最常见的安全错误。
我很少在 MySQL 中使用存储过程,不是因为它们不安全(正如我所说,它们不是,安全取决于开发人员),而是因为 MySQL 存储过程很难编写。没有调试器,没有包支持,没有编译器,用它来编写代码是一种笨拙的语言。任何我可以使用存储过程完成的任务,我都可以用 PHP、Python 或 Ruby 等脚本语言更轻松地编写。
关于php - 存储过程的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50710955/