根据"如果它像鸭子走路,它听起来像鸭子"的原则,亚马逊的SimpleDB支持的SQL风格的查询似乎应该容易受到SQL注入式攻击.这是一个简单的例子,假设攻击者的输入进入变量$ category,并且他可以猜测列名:
$category = "Clothes' OR Category LIKE '%";
$results = $sdb->select("SELECT * FROM `{$domain}` WHERE Category = '$category'");
Run Code Online (Sandbox Code Playgroud)
如果您正在玩主游戏,这些行可以是html-sdb_create_domain_data.php亚马逊PHP SDK(1.2)示例代码中文件第119行的原位替换.
亚马逊发布了引用规则,我想我可以编写一些东西来确保用户输入中的任何"或"被加倍......但我一直都知道转义基本上是一场军备竞赛,这使得参数化成为我选择的武器.例如,使用MySQL.
其他人用来保护SimpleDB查询的是什么?
我正在编写一个允许用户指定正则表达式的应用程序.当然,用户会犯错误,因此我需要一种方法来处理不可解析的正则表达式,并为用户提供有关如何解决问题的可操作建议.
我遇到的问题是抛出的异常new RegExp("something awful")对regex n00bs没有帮助,并且每个浏览器都有不同的消息.例如:
鉴于:
try{
new RegExp("(pie");
}catch(e){
console.log(e.message);
}
Run Code Online (Sandbox Code Playgroud)
如果这些消息字符串是用户语言本地化的,或者它们随着时间的推移而漂移,那么这对我来说并不会让我感到惊讶,这使得这是一个疯狂的结,用exception.message解开.
我的目标是捕捉异常,弄清楚它的真正含义,并提出一个更适合初学者的消息.(最后突出显示了无与伦比的paren,在这个例子中.)
我应该使用其他一些异常标识符吗?有没有更好的方法来分辨这些?如果没有这一切,有没有人只是收集了几个最流行的浏览器中所有这些字符串的内容?
我有两个复杂的PHP对象,每个对象都有几个MySQL表中的数据.
有时,我只需要从数据库中删除一个对象A,这需要3个SQL语句.
有时,我需要从数据库中删除一个对象B,这需要4个SQL语句,并且还需要查找和删除对象B拥有的所有对象A.
所以在函数delete_A()中,我在一个事务中执行那些语句.在delete_B()函数内部,我想运行一个覆盖delete_A()内部活动的大型事务.如果删除B的整个原子都失败了,我需要在回滚中恢复它的所有A.
如果尚未运行更大的事务,如何更新delete_A()的定义以仅打开新事务.
我希望能够做这样的事情,但该autocommit属性似乎没有被改变beginTransaction()
function delete_A($a){
global $pdo;
$already_in_transaction = !$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);
if(!$already_in_transaction){
$pdo->beginTransaction();
}
//Delete the A
if(!$already_in_transaction){
$pdo->commit();
}
}
function delete_B($b){
global $pdo;
$pdo->beginTransaction();
foreach($list_of_As as $a){
delete_A($a);
}
$pdo->commit();
}
Run Code Online (Sandbox Code Playgroud) 我对YUI2有很多经验,我正在加快YUI3的速度.我正在编写的服务需要HTTPS,但是香草YUI体验来自雅虎仅支持HTTP的CDN,当Chrome浏览器试图将HTTPS页面与HTTP javascript混合时,它在Chrome中悄然失败并在现代IE中大声失败.
我的目标是获得所有:
显而易见的解决方案似乎是放弃目标#5和自主机组合.
我怎样才能达到所有5个目标?